设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2369|回复: 0

SAS常用函数

[复制链接]

30

主题

284

金钱

420

积分

入门用户

发表于 2019-3-4 13:49:31 | 显示全部楼层 |阅读模式

SAS常用函数
COMPRESS函数
功能:消除指定的字符串
语法:COMPRESS(<source>,<chars>,<modifiers>)
source:操作对象,可以是字符串也可以是变量
chars:缺省情况下是指需要消除的字符串,但是如果使用了"K"参数,则是指需要保留的字符串。
modifiers:参数类型,缺省情况下是指消除空格,其他常用的有,I(i)忽略消除指定的字符串的大小写。
  1. data temp;
  2. x1=' 1 2 3 4';
  3. x2='Abacabbad';
  4. y1=compress(x1,'');
  5. y2=compress(x2,'Ab');
  6. proc print;
  7. run;
复制代码

注意:y2=compress(x2,'Ab');中'Ab'中A和b是或的关系。
输出结果:
微信图片_20190304140813.jpg
案例:对客户提供的手机号判断是"联通"还是"移动"
  1. data temp;
  2. length mob$ 14;
  3. input mob$ @@;
  4. cards;
  5. 13803096728 013803996624 131-0239-6724 1382399672 01310399672
  6. ;
  7. run;
  8. data mobs;
  9.    set temp;
  10.        if length(compress(mob,'0123456789','k'))=11 then do;
  11.        mob_phone=substr(compress(mob,'0123456789','k'),1,11);
  12.        if substr(compress(mob,'0123456789','k'),1,3) in ('130','131','132','133','150','151') then do;
  13.        flag='联通';output;end;
  14.        else if substr(compress(mob,'0123456789','k'),1,3) in ('134','135','136','137','138','130','154','
  15.        155','156','157','158','159') then do;
  16.        flag='移动';output;end;end;
  17. else if length(compress(mob,'0123456789','k'))=12
  18. AND substr(compress(mob,'0123456789','k'),1,1)='0' then do;
  19.        mob_phone=substr(compress(mob,'0123456789','k'),2,11);
  20.        if substr(compress(mob,'0123456789','k'),2,3) in ('130','131','132','133','150','151') then  do;
  21.        flag='联通';output;end;
  22.        else if substr(compress(mob,'0123456789','k'),2,3) in ('134','135','136','137','138','130','154','
  23.        155','156','157','158','159') then do;
  24.        flag='移动';output;end;
  25.        end;
  26. run;
复制代码

输出结果:
微信图片_20190304141326.jpg
结果中,x是数值型,y是字符型。

SUBSTR函数
功能:截取字符函数
语法:variable=substr(string,position,length)
  1. data test3;
  2. x='abcd e';
  3. y=substr(x,2);
  4. z=substr(x,length(x)-2,3);
  5. run;
复制代码

结果输出:
微信图片_20190304141551.jpg

TRANWRD函数
功能:替代字符
语法:TRANWRD(source,target,replacement)
  1. data test3;
  2. x='abcdaba';
  3. y=tranwrd(x,'ab','k');
  4. z=tranwrd(x,'ab','');
  5. w=compress(z);
  6. run;
复制代码

y=tranwrd(x,'ab','k');中a和b是并的关系。
结果输出:
微信图片_20190304141732.jpg

input函数
功能:指定字符型的值转换成数值型的值。
input(source,informat)
  1. data teste4;
  2. x1='20190118';x2='190118';
  3. y1=input(x1,yymmdd10.);
  4. format y1 Yymmdd10.;
  5. y2=input(x2,yymmdd8.);
  6. format y2 Yymmdd10.;
  7. run;
复制代码

结果输出

intck函数
功能:向下取整取时间间隔
语法:intck(interval,from,to)
interval:通常情况下指年、月、季度、周等
  1. data test;
  2. x1=intck('year','3DEC2007'd,'2jan2018'd);
  3. x2=intck('qtr','3DEC2007'd,'2jan2018'd);
  4. x3=intck('month','3DEC2007'd,'2jan2018'd);
  5. put x1= x2= x3= ;
  6. run;
复制代码

结果输出:
微信图片_20190304142039.jpg

intnx函数
功能:返回指定间隔时间的日期值。
语法:intnx(interval,start-from,increment,<alignment>)
interval:通常情况下指年、月、季度、周等
start-from:开始时间
increment:间隔步长。
alignment:日期控制,有以下常用参数:
benginning:别名是B,指出返回的日期值是间隔步长的起始值。
middle:别名是M,指出返回的日期值是间隔步长的中间值。
end:别名是E,指出返回的日期值是间隔步长的中间值。
sameday:别名是S,指出返回的日期值是间隔步长的同值。
应用:
1、取间隔一年后的同日
intnx('year','01jan95'd,'sameday');
2、取间隔1个月后的末日。
intnx('year','01jan95'd,'end');
  1. data test1;
  2. x=today();
  3. format x yymmdd10.;
  4. b=intnx('month',x,1,'end');
  5. format b yymmdd10.;
  6. c=compress(put(intnx('month',x,1,'end'),yymmn6.),'-');
  7. run;
复制代码

结果输出:
微信图片_20190304142226.jpg

SCL语言函数
open函数/close函数
open函数
功能:打开一个数据集,并返回一个独一无二的ID。打开成功返回大于0,失败等于0。
语法:open(<data-set-name,mode>)
close函数
功能:关闭一个数据集,并返回一个独一无二的ID。关闭成功返回0,失败大于0。
语法:close(<data-set-name,mode>)
  1. %let Dsid=%sysfunc(open(work.test1));
  2. %put &Dsid;
  3. %let Dsid=%sysfunc(close(&Dsid));
  4. %put &Dsid;
复制代码

结果输出:
微信图片_20190304142411.jpg

fetchobs函数
功能:获取打开的数据集的一条观测,成功获取返回值0,否则非0。
语法:fetchobs(data-set-id,obs-number,<options>)
应用:%let re=%sysfunc(fetchobs(&dsid,10));

varnum函数
功能:获取一个数据集的某一变量的位置。
语法:varnum(data-set-id,var-name);
应用:%let name_num=%sysfunc(varnum(&dsid,name));

getvarc函数/getvern函数
getvarc函数:返回某一字符型变量的值。
应用:%let name=%sysfunc(getvarc(&dsid,&name_num))
getvern函数类似于getverc函数,返回数值型变量的值。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表