|
SAS常用函数
COMPRESS函数
功能:消除指定的字符串
语法:COMPRESS(<source>,<chars>,<modifiers>)
source:操作对象,可以是字符串也可以是变量
chars:缺省情况下是指需要消除的字符串,但是如果使用了"K"参数,则是指需要保留的字符串。
modifiers:参数类型,缺省情况下是指消除空格,其他常用的有,I(i)忽略消除指定的字符串的大小写。
- data temp;
- x1=' 1 2 3 4';
- x2='Abacabbad';
- y1=compress(x1,'');
- y2=compress(x2,'Ab');
- proc print;
- run;
复制代码
注意:y2=compress(x2,'Ab');中'Ab'中A和b是或的关系。
输出结果:
案例:对客户提供的手机号判断是"联通"还是"移动"
- data temp;
- length mob$ 14;
- input mob$ @@;
- cards;
- 13803096728 013803996624 131-0239-6724 1382399672 01310399672
- ;
- run;
- data mobs;
- set temp;
- if length(compress(mob,'0123456789','k'))=11 then do;
- mob_phone=substr(compress(mob,'0123456789','k'),1,11);
- if substr(compress(mob,'0123456789','k'),1,3) in ('130','131','132','133','150','151') then do;
- flag='联通';output;end;
- else if substr(compress(mob,'0123456789','k'),1,3) in ('134','135','136','137','138','130','154','
- 155','156','157','158','159') then do;
- flag='移动';output;end;end;
- else if length(compress(mob,'0123456789','k'))=12
- AND substr(compress(mob,'0123456789','k'),1,1)='0' then do;
- mob_phone=substr(compress(mob,'0123456789','k'),2,11);
- if substr(compress(mob,'0123456789','k'),2,3) in ('130','131','132','133','150','151') then do;
- flag='联通';output;end;
- else if substr(compress(mob,'0123456789','k'),2,3) in ('134','135','136','137','138','130','154','
- 155','156','157','158','159') then do;
- flag='移动';output;end;
- end;
- run;
复制代码
输出结果:
结果中,x是数值型,y是字符型。
SUBSTR函数
功能:截取字符函数
语法:variable=substr(string,position,length)
- data test3;
- x='abcd e';
- y=substr(x,2);
- z=substr(x,length(x)-2,3);
- run;
复制代码
结果输出:
TRANWRD函数
功能:替代字符
语法:TRANWRD(source,target,replacement)
- data test3;
- x='abcdaba';
- y=tranwrd(x,'ab','k');
- z=tranwrd(x,'ab','');
- w=compress(z);
- run;
复制代码
y=tranwrd(x,'ab','k');中a和b是并的关系。
结果输出:
input函数
功能:指定字符型的值转换成数值型的值。
input(source,informat)
- data teste4;
- x1='20190118';x2='190118';
- y1=input(x1,yymmdd10.);
- format y1 Yymmdd10.;
- y2=input(x2,yymmdd8.);
- format y2 Yymmdd10.;
- run;
复制代码
结果输出
intck函数
功能:向下取整取时间间隔
语法:intck(interval,from,to)
interval:通常情况下指年、月、季度、周等
- data test;
- x1=intck('year','3DEC2007'd,'2jan2018'd);
- x2=intck('qtr','3DEC2007'd,'2jan2018'd);
- x3=intck('month','3DEC2007'd,'2jan2018'd);
- put x1= x2= x3= ;
- run;
复制代码
结果输出:
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');
- data test1;
- x=today();
- format x yymmdd10.;
- b=intnx('month',x,1,'end');
- format b yymmdd10.;
- c=compress(put(intnx('month',x,1,'end'),yymmn6.),'-');
- run;
复制代码
结果输出:
SCL语言函数
open函数/close函数
open函数
功能:打开一个数据集,并返回一个独一无二的ID。打开成功返回大于0,失败等于0。
语法:open(<data-set-name,mode>)
close函数
功能:关闭一个数据集,并返回一个独一无二的ID。关闭成功返回0,失败大于0。
语法:close(<data-set-name,mode>)
- %let Dsid=%sysfunc(open(work.test1));
- %put &Dsid;
- %let Dsid=%sysfunc(close(&Dsid));
- %put &Dsid;
复制代码
结果输出:
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函数,返回数值型变量的值。
|
|