前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SAS-函数(二),几个很好用的函数~

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

作者头像
Setup
发布2019-10-20 18:47:46
10.3K0
发布2019-10-20 18:47:46
举报
文章被收录于专栏:SAS程序分享号号号

第二部分

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

在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;

效果是这样的:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-02-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SAS程序分享号号号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档