SAS-函数(二),几个很好用的函数~

2019-10-20 18:47:46 浏览数 (1)

第二部分

第二部分的函数也是很常用的基本函数,学会了某些函数,在编程上回很省事,效率也会大大的提高...

在SAS编程中,经常遇需要判断一条观测下,缺失值的情况的,比如:“是否有不良事件选择否,但不良事件记录不全为空”。那么就来看看几个函数,如何来实现计算缺失值的情况。

代码语言:javascript复制
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。

代码语言:javascript复制
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过程中如果我没有记错的话,也是可以做到的...

在编程的过程中,我们经常会出现,对于多个变量,取第一次非空的那个变量的值,当然实现的方法很多种,众多的方法也没有俩个函数来的简单直接...

代码语言:javascript复制
aa=coalescec(a1,a2,a3,a4,a5);
/*对字符型变量使用*/
bb=coalesce(b1,b2,b3,b4,b5);
/*对数值型变量使用*/

coalescec、coalesce

发现了没有?在SAS里面有挺多函数是分别对数值型或字符型变量处理的。就像这儿,coalescec是对字符型变量进行处理的,取第一个不为空的变量的值,coalesce是对数值型变量进行处理的。

我们经常会进行一些数值运行,有哪些函数是可以控制变量的精度呢,接下来就来看看这几个函数...

代码语言:javascript复制
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个常见,其他的基本不用,但是也觉得挺不错...有兴趣还是看看书..

代码语言:javascript复制
a= 'Setup Shi yi ge hao ren';
b=upcase(a);
/*upcase:字符串大写*/
c=lowcase(a);
/*lowcase:字符串小写*/

upcase、lowcase

嗯,还是不多说,见上面黑色部分的例子,函数的使用就是这么简单...

现在的临床试验用的数据,导出的大部分都是按照Domain进行划分的,也是纵表的结构,我们经常会计算访视时间窗,本次访视与上次访视的差值,当然实现的方式有很多,那么如何可以用函数来快捷把上次访视的日期衍生一个新的变量呢?还是先来看一段代码...

代码语言:javascript复制
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的强大...

代码语言:javascript复制
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;

效果是这样的:

0 人点赞