第二部分
第二部分的函数也是很常用的基本函数,学会了某些函数,在编程上回很省事,效率也会大大的提高...
在SAS编程中,经常遇需要判断一条观测下,缺失值的情况的,比如:“是否有不良事件选择否,但不良事件记录不全为空”。那么就来看看几个函数,如何来实现计算缺失值的情况。
new1=N(of x1-x3);
/*N函数统计数值型变量非空个数*/
new2=CMISS(of y1-y3);
/*CMISS:字符型为空个数*/
new3=NMISS(of x1-x3);
/*NMISS:数字型变量为空个数*/
N、CMISS、NMISS
看上面黑色部分的代码,注释部分,有对N、CMISS、NMISS函数使用的说明。其实很简单,但是一定要注意,计算的时候字符型变量和数值型变量不要弄混了,否则会报错的...
既然说到Miss相关的函数,那么就不得不提另外俩个函数,那就是Missing、与call missing。
if missing(a);
/*筛选出变量 a 缺失的观测*/
if ^missing(a);
/*筛选出变量 a 不缺失的观测: 在missing前面加了一个 ^的符号,
当然也可以写Not missing(a)*/
if not first.a then call missing(b,c,d);
/*如果不是first.a 则置空变量 b c d*/
Missing、Call missing
这个俩个函数其实也都非常简单,值得一说的就是call missing(),小编在出一些listing、report的时候比较喜欢用这个,让排版变得美观些...就是下面这种效果,当然report过程中如果我没有记错的话,也是可以做到的...
在编程的过程中,我们经常会出现,对于多个变量,取第一次非空的那个变量的值,当然实现的方法很多种,众多的方法也没有俩个函数来的简单直接...
aa=coalescec(a1,a2,a3,a4,a5);
/*对字符型变量使用*/
bb=coalesce(b1,b2,b3,b4,b5);
/*对数值型变量使用*/
coalescec、coalesce
发现了没有?在SAS里面有挺多函数是分别对数值型或字符型变量处理的。就像这儿,coalescec是对字符型变量进行处理的,取第一个不为空的变量的值,coalesce是对数值型变量进行处理的。
我们经常会进行一些数值运行,有哪些函数是可以控制变量的精度呢,接下来就来看看这几个函数...
data a;
a=1.37;
b=-1.32;
a1=ceil(a);b1=ceil(b);
put "NOTE: a1=" a1 "b1=" b1 "Ceil 向上取整数";
a2=floor(a);b2=floor(b);
put "NOTE: a2=" a2 "b2=" b2 "floor:向下取整数";
a3=int(a);b3=int(b);
put "NOTE: a3=" a3 "b3=" b3 "int:取整数";
a4=round(a,.1);b4=round(b,.1);
put "NOTE: a4=" a4 "b4=" b4 "round 自由保留小数(四舍五入)";
run;
ceil、floor、int、round
这四个函数啥意思呢,可以看上面的那段代码 put 部分...我还是贴一下这段代码运行的Log...更多用法还是看SASHELP....
在编程中,我们经常会对字符串大小写进行转换,在SAS里面就提供了好几个这样的函数,我这儿就说2个常见,其他的基本不用,但是也觉得挺不错...有兴趣还是看看书..
a= 'Setup Shi yi ge hao ren';
b=upcase(a);
/*upcase:字符串大写*/
c=lowcase(a);
/*lowcase:字符串小写*/
upcase、lowcase
嗯,还是不多说,见上面黑色部分的例子,函数的使用就是这么简单...
现在的临床试验用的数据,导出的大部分都是按照Domain进行划分的,也是纵表的结构,我们经常会计算访视时间窗,本次访视与上次访视的差值,当然实现的方式有很多,那么如何可以用函数来快捷把上次访视的日期衍生一个新的变量呢?还是先来看一段代码...
proc sort data=sv(keep=usubjid svstdtc visit_n)
out=a sortseq=linguistic(numeric_collation=on);
by usubjid visit_n ;quit;
data a1;
set a;
by usubjid visit_n;
dat=lag(svstdtc);
if first.usubjid then do;
call missing(dat);end;
run;
光有代码是没有说服了的,在来看一下运行后的结果:
lag
看到上面的效果,现在知道Lag函数怎么用了吧...如果类似场景,可以照着例子改,但是还是要清楚,这个场景下为啥要用sort排序后,还要用first.函数去置空一下...明眼人应该都看的出来,我相信你们都是明眼人.....我就不解释了。lag函数其实很强大的,那么就在来看一个代码和效果,小编来证明一下,Lag的强大...
data a;
do i=1 to 9;
lag1=lag(i);
lag2=lag2(i);
lag3=lag3(i);
lag4=lag4(i);
lag5=lag5(i);
lag6=lag6(i);
lag7=lag7(i);
lag8=lag8(i);
lag9=lag9(i);
output;
end;
run;
效果是这样的: