SAS中文论坛
标题:
请高手指点!
[打印本页]
作者:
shiyiming
时间:
2009-9-5 11:43
标题:
请高手指点!
有这样一个数据集:CM。
包括变量:cn dn cmterm cmstdtc cmendtc cmroute cmcat cmdose cmindc page cmseq;
现在需要按照如下规则提取数据:
以下5个变量全部相同的N条记录(N>2),只取第一条
cmterm:用药名称
cmstdtc :开始时间
cmendtc :结束时间
cmdose :剂量
CMROUTE :给药途径
这段程序需要放在SAS下对整个CM库做处理。
最好能用SQL语句实现!
请各位大侠帮忙!
作者:
shiyiming
时间:
2009-9-7 17:42
标题:
Re: 请高手指点!
/*先排序*/
proc sort data=test1 out=test2;
by cmterm cmstdtc cmendtc cmdose cmroute;
run;
/*再过滤*/
data test3;
set test2;
retain x1 x2 x3 x4 x5;
if (cmterm eq x1) and (cmstdtc eq x2) and (cmendtc eq x3) and (cmdose eq x4) and (cmroute eq x5) then do;
put "cut this one.";
end;
else do;
output;
cmterm =x1; cmstdtc = x2; cmendtc = x3; cmdose = x4; cmroute = x5;
end;
drop x1-x5;
run;
作者:
shiyiming
时间:
2009-9-11 00:27
标题:
Re: 请高手指点!
如果你对所有五个变量相同的OBS,只要保留一条即可,而不在意究竟应该保留那条,用Proc Sort NODUPKEY。dupout 保留放弃的数据.
对Windows下, 多CPU系统, SAS 不保证保留的是原始数据中第一次出现的重复纪录.
proc sort data=test1 nodupkey out=test2 dupout=dups;
by cmterm cmstdtc cmendtc cmdose cmroute;
run;
欢迎光临 SAS中文论坛 (https://mysas.net/forum/)
Powered by Discuz! X3.2