1.条件判断函数
ifc函数(条件,执行语句1,执行语句2):根据表达式是否为真、假或缺失返回字符值。
ifn函数(条件,执行语句1,执行语句2):根据表达式是否为真、假或缺失返回一个数值。
例如:
ENRLFL=ifc(DSYN="是","Y","N"); /*ENRLFL为入组人群标识*/
data su1;
set raw.su(rename=(SUDYN=MH1 SUDQYN=MH2 SUSYN=MH3));
if MH1^="NA!" then MH1N=ifn(MH1="是",1,2);
if MH2^="NA!" then MH2N=ifn(MH2="是",1,2);
if MH3^="NA!" then MH3N=ifn(MH3="是",1,2);
keep USUBJID MH: ;
run;
2.coalescec函数/coalesce函数
coalescec函数(s1,s2,..,sn):从字符参数列表中返回第一个非空值或非缺失值。
coalesce函数(s1,s2,..,sn):返回数值参数列表中第一个不缺失的值。
例如:
ETHNIC=coalescec(ETHNICO,ETHNIC); /*其他名族,民族*/
EOSDT=input(coalescec(DSEXDAT,DSENDAT),yymmdd10.); /*中止试验日期,完成试验日期*/
3.与缺失值相关的函数
n函数:返回非空或非缺失数值的个数。(针对数值型变量或常量);
nmiss函数:返回缺失数值的个数(针对数值型变量或常量,将字符型变量的所有值都当作缺失值);
cmiss函数:计数丢失参数的数量(数值型、字符型均可);
not missing :如果是缺失的,则返回0;反之,则返回1;
missing函数:如果是缺失的,则返回1;反之,则返回0;
call missing:对参数进行置空操作;
data class;
set sashelp.class;
if age=13 then call missing(weight,sex); /*call missing*/
a=n(age,weight); /*n*/
b=nmiss(age,weight); /*nmiss*/
c=cmiss(sex,weight); /*cmiss*/
d=not missing(sex); /*not missing*/
e=missing(sex); /*missing*/
drop name height;
run;
proc print;
run;
运行结果为:
例如:
if nmiss(weight,height)=0 then BMI=round(WEIGHT/(HEIGHT/100)**2,0.1);
if missing(RANDNO) then do;
ARM="筛选失败";
ARMCD="FAIL";
end;
4.kscan函数/scan函数
kscan函数(s,n<,'char'>):表示从变量中以char为分隔符提取第n个部分。
scan函数(s,n<,'char'>):表示从字串string中以char为分隔符提取第n个字串。
5.compress函数
compress函数(s,c,m) :将字符串c(默认为空格)从字符串中移除,m为操作符,如下:
a 增加字母(A- Z, a - z)、中文到初始字符里(chars)。
c 增加控制字符。
d 增加数字到初始字符里(chars)。
f 增加下划线、字母 (A - Z, a - z) 到初始字符里(chars)。
g 增加图形字符到初始字符里(chars)。
i 忽略字符大小写。
k 不移除初始字符(chars)而是返回这些字符。
l 增加小写字母(a - z)、中文。
n 增加数字、下划线和字母(A - Z, a - z)。
o 一次性处理第二、第三个参数,而不是每次调用函数时都处理。
在data步或sql步中(不包括where子句)使用此操作符,当在循环中调用compress且第二、三参数不变时,会极大加快处理速度。
p 增加标点符号。
s 增加分隔字符,包括空格,水平制表符,垂直制表符,回车符,换行符和换页符。
t 去除第一、二参数的尾部空格。
u 增加大写字母(A- Z)。
w 增加可打印字符。
x 增加十六进制字符。
操作符可以多个一起使用,也可以与需要删除的字符一起使用。需要注意的是,操作符的默认位置是compress的第三个参数,因此在没有第二个参数的情况下,需要连续输入两个逗号,表示第二个参数为默认。
6.kindex函数
kindex函数('x','y'):在x中查找字符串y,返回第一次出现的位置,找不到返回0。
例如:
data adsl1;
set adsl;
TRTSEQP=kscan(ARM,2,"组"); /*kscan函数*/
TRTSEQPN=input(compress(TRTSEQP,"","kd"),best1.); /*compress函数*/
if kindex(ARM,"50mg") then TRTGR1N=1; /*kindex函数*/
if kindex(ARM,"100mg") then TRTGR1N=2;
run;
proc print;
run;
运行结果为:
7.catx函数
catx函数('',x,y):删除开头和结尾的空格,插入分隔符,并返回连接的字符串。
例如:
TR01SDTM=catx("T",ECDAT,ECTIM); /*使用'T'连接日期与时间变量*/
8.choosec函数
choosec函数:返回一个数值,表示从参数列表中选择的结果。根据变量的数值分别赋值。
9.whichc函数
whichc函数:从字符串列表中返回该字符串的第一个位置。除字符串列表所列的其余结果返回0。
例如:
data adsl3;
set adsl2;
TRTGR1=choosec(TRTGR1N,"50mg交叉组","100mg交叉组");
TRT01PN=whichc(TRT01P,"50mg安慰剂组","100mg安慰剂组","50mg试验组","100mg试验组");
TRT02PN=whichc(TRT02P,"50mg安慰剂组","100mg安慰剂组","50mg试验组","100mg试验组");
run;
proc print;
run;
运行结果为: