迷失缠绵情愫中 发表于 2019-3-4 13:49:31

SAS常用函数


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') thendo;
       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函数,返回数值型变量的值。

页: [1]
查看完整版本: SAS常用函数