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