作者Justee (想像力)
看板Statistics
标题Re: [程式] 利用SAS进行排序以及RETAIN语法的应用
时间Thu Jul 19 18:51:59 2012
※ 引述《Justee (想像力)》之铭言:
: ------------------------------------------------------------------------
: [软体程式类别]: SAS
: [程式问题]: 资料处理
: [软体熟悉度]: 中(3个月到1年)
: [问题叙述]:
: 我有一组资料库,因为其中部分资料的结束时间为missing data,
: 所以想要使用最後一笔资料来取代。
这边我自己发现一个问题,那就是当这两个栏位都是时间栏位时,
"?"反而会被排在最後。
: 病人 处方开始日期 处方结束日期
: A 20120630 20120712
: A 20120615 20120713
: A 20120703 .
: A 20120629 .
: B 20120712 20120713
: B 20120629 .
: 问题一:
: 使用PROC SORT依病人与处方结束日期排序後,missing data都会被SAS视为无限小,
: 排序後落在最前面,可以命令将排序後的missing data排在最後吗?
自问自答:可以,转换为文字变项即可。
将missing data转换为文字变项,排序的先後顺序就会变到最後。
: 问题二:
: 如何使用RETAIN statement来帮missing data补值呢?
: 感谢各位大德的帮忙!
搜寻铁大的文章+关键字missing可以找到类似的程式码,以下是小弟的程式:
PROC SORT DATA=Test; BY ACC EndDate; RUN;
DATA Test; SET Test;
RETAIN EndDate EndDate_New;
IF EndDate^="?" THEN EndDate_New=EndDate; RUN;
RUN;
如此一来会创造出新栏位EndDate_New,里面就是我所想求的结果。
在需要依照帐号的部分,我创造了一个栏位并利用lag函数。
lag_ACC=
lag(ACC
) /*lag函数表示前一列中的ACC。*/
IF ACC=lag_ACC THEN EndDate=Enddate_New;
这样就可以解决需要同一帐号的问题了!
折腾了一天,可以找到解法真是很开心!!
感谢铁大,也希望之後遇到类似问题的人可以获益~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.121.97
※ 编辑: Justee 来自: 140.112.121.97 (07/25 11:08)