SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 647|回复: 2
打印 上一主题 下一主题

请高手指点!

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-9-5 11:43:39 | 只看该作者

请高手指点!

有这样一个数据集:CM。

包括变量:cn dn cmterm cmstdtc cmendtc cmroute cmcat cmdose cmindc  page cmseq;

现在需要按照如下规则提取数据:
以下5个变量全部相同的N条记录(N>2),只取第一条

cmterm:用药名称
cmstdtc :开始时间
cmendtc :结束时间
cmdose  :剂量
CMROUTE :给药途径

这段程序需要放在SAS下对整个CM库做处理。
最好能用SQL语句实现!
请各位大侠帮忙!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2009-9-7 17:42:41 | 只看该作者

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;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2009-9-11 00:27:08 | 只看该作者

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;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-5 23:13 , Processed in 0.132888 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表