SAS函数是一个子程序,对自变量返回一个结果值。
SAS函数的基本形式:
y=函数名(X1,X2,…),其中X1,X2…为参数值
易混淆的概念
字符—character:一个一个地字符,如’a’,‘a’‘b’(‘ab’);
注:字符常数是与引号括起来的,字符变量的名称是没有引号的,即 字符常数不能作为字符变量的名称;SAS中比较引号括起来的字符时是区分大小写的,如‘ABC’与‘abc’是不同的。十进制的字符常数可以表示为‘543’x,x紧跟在引号后面。
字符串—string:一个或多个字符组成的串,如’a’,‘ab’;
词—word:由分隔符(delimeter)隔开的字符串,如’I love programming’‘I@love@programming’;
数值函数
mod(x,y):返回x除以y的余数;
int(x):返回x的整数部分;
ceil(x):返回≥x的最小整数;
floor(x):返回≤x的最大整数;
round(x,舍入值):根据舍入值对x进行舍入,即将x舍入到最接近能被舍入值整除的数值;
abs(x):返回x的绝对值;
log(x):返回x的自然对数值;
sqrt(x):返回x的平方根;
exp(x):返回x的指数值;
data a;
num1=round(8.6,0.1);
num2=round(8.6,1);
num3=round(8.6,2);
a=mod(10,3);
b=int(8.6);
c=ceil(8.6);
d=floor(8.6);
e=abs(-8.6);
f=sqrt(4);
g=log(4);
h=exp(4);
run;
proc print;
run;
运行结果:
日期时间函数
date()、today():返回当天的日期;
year()、month()、day()和qtr():分别提取一个日期中的年、月、日、季度;
mdy(month,day,year):将月、日、年组合成完整日期;
intck(‘’custom-inteval‘’,start-date,end-date):返回在一个给定的时间跨度内发生的时间间隔的数量,可以用来计算天day、周week、月month、年year、季度qtr等;
yrdif(开始日期,结束日期,“计算依据”):当计算依据为actual时,计算两个日期之间以年为单位的差值;当计算依据为age时,计算两个日期之间的年龄差值;
datdif(开始日期,结束日期,“计算依据”):当计算依据为actual时,计算两个日期之间以天为单位的差值;
data datetime;
format td date yymmdd10.;
da=date();
td=today();
year=year(td);
month=month(td);
day=day(td);
q=qtr(td);
date=mdy(8,02,2018);
yd=yrdif(date,td,'actul');
age=yrdif(date,td,'age');
dd=datdif(date,td,'actul');
days=intck('day',date,td);
run;
运行结果:
字符型相关函数
字母大小写转换
upcase(‘’):转换为大写;
lowcase(‘’):转换为小写;
propcase(‘argument’<,‘delimiters’>):各单词首字母大写,其余小写,默认的分隔符delimiters是空白,正斜杠,连字符、开括号、句号和制表符;
data change_case;
a=upcase('abc');
b=lowcase('Abc');
c=propcase('ab cD');
run;
空格处理
trim(‘’):移除尾部空格;
trimn(‘’):移除字符串的尾部空格;
left(‘’):移除首部空格;
strip(‘’):移除首尾空格;
compress(‘’):移除所有空格(或指定字符)
compress(source<,character><,modifier(s)>)
compbl(‘’):将多个连续空格,压缩为1个;