楼主: esther09
14905 8

关于SAS (NODUPKEY) 的问题! [推广有奖]

  • 0关注
  • 0粉丝

本科生

17%

还不是VIP/贵宾

-

威望
0
论坛币
128 个
通用积分
0.0500
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
8426 点
帖子
45
精华
0
在线时间
122 小时
注册时间
2010-5-26
最后登录
2025-11-26

楼主
esther09 发表于 2010-5-29 12:51:58 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我是SAS的初学者。

我有以下的数据。
Data raw;
Input PatientID $
1-5 weight 7- 9.
Age 10- 14 med_ml
15-17;

Datalines;
1234


50

35
20

1234
55
35
10

1234
50
36
10

4567
67
34
15

4567
67
35
20

;
我只想留下Unique PatientID。比方说,一个1234和4567。

为了避免PatientID重复,我用了Nodupkey来过滤。


Proc sort data=raw out=prescribe NODUPKEY;
By PatientID age;
Run;

请问有谁知道Nodupkey如何(用什么规制) 过滤PatientID. 只取PatientID=1234第一个的observation?或最后的observation

向各位请教了。谢谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:NODUPKEY Key observation observat prescrib NODUPKEY

回帖推荐

yatming 发表于5楼  查看完整内容

sort nodupkey可以看成两步:先排序,然后remove重复的。 nodupkey只是负责按var排序好之后把first.var留下,其他remove掉。 所以如果排序之后的observation的前后关系和原数据一样,那么out的结果就是取出现的第一条记录。 即:数据集: 1 3 2 1 1 4 对第一个变量排序,如果结果是 1 3 1 4 2 1 那么remove的就是1 4 另一种排序结果是 1 4 1 3 2 1 那么remove的就1 3。 所以排序过程是否保留原数据集的中前后 ...

xiaosanmao 发表于3楼  查看完整内容

Data raw; Input PatientID $ weight Age med_ml @@; Datalines; 1234 50 35 20 1234 55 35 10 1234 50 36 10 4567 67 34 15 4567 67 35 20 ; run; proc sort;by PatientID;run; data final;set raw;by PatientID; if first.PatientID ;run; /*需要最后一个改成 last.PatientID */

本帖被以下文库推荐

沙发
zhoupuhan 发表于 2010-5-29 12:54:47
可惜不会。。

藤椅
xiaosanmao 发表于 2010-5-29 13:06:30
Data raw;
Input PatientID $
weight  
Age  med_ml
@@;
Datalines;
1234


50

35
20
1234
55
35
10
1234
50
36
10
4567
67
34
15
4567
67
35
20
;

run;
  
proc sort;by PatientID;run;
data final;set raw;by PatientID;
if first.PatientID ;run;

/*需要最后一个改成  last.PatientID */

板凳
dankdark 发表于 2010-5-29 14:22:13
如果只想留下Unique的 PatientID,那你就by PatientID. 你上面的程序by PatientID  Age, 那么将去掉PatientID  Age同时相同的observation.

Data raw;
Input PatientID $ weight Age med_ml ;
Datalines;
1234 50 35 20
1234 55 35 10
1234 50 36 10
4567 67 34 15
4567 67 35 20
;
run;
proc sort data=raw out=a nodupkey;
by PatientID;
run;

报纸
yatming 发表于 2010-5-30 00:49:45
sort nodupkey可以看成两步:先排序,然后remove重复的。
nodupkey只是负责按var排序好之后把first.var留下,其他remove掉。
所以如果排序之后的observation的前后关系和原数据一样,那么out的结果就是取出现的第一条记录。
即:数据集:
1 3
2 1
1 4
对第一个变量排序,如果结果是
1 3
1 4
2 1
那么remove的就是1 4

另一种排序结果是
1 4
1 3
2 1
那么remove的就1 3。

所以排序过程是否保留原数据集的中前后关系,和nodupkey无关,是受另一个option(equals)的影响。
已有 4 人评分经验 学术水平 热心指数 信用等级 收起 理由
wsw2013 + 1 + 1 热心帮助其他会员
guo.bailing + 100 + 1 + 1 + 1 精彩帖子
pobel + 1 + 1 + 1 我很赞同
cloveror + 1 + 1 精彩帖子

总评分: 经验 + 100  学术水平 + 4  热心指数 + 4  信用等级 + 2   查看全部评分

地板
esther09 发表于 2010-5-30 13:18:59
Many thanks for the advices!

7
xiaoqiu917 发表于 2011-6-22 16:53:29
应该是留下第一条

8
goldbaodi 发表于 2011-6-23 04:17:26
1- PROC SORT data=old out=new NODUPKEY;          is a good way

2- You can  also try to use :
PROC SQL;
CREATE TABLE new AS
SELECT DISTINCT PatientID
FROM old;
QUIT;

9
guo.bailing 发表于 2013-1-6 11:29:54
yatming 发表于 2010-5-30 00:49
sort nodupkey可以看成两步:先排序,然后remove重复的。
nodupkey只是负责按var排序好之后把first.var留下 ...
解释得很详细
自助者,天助之!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 11:46