全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
9030 4
2015-10-04
悬赏 10 个论坛币 已解决
我的问题,如标题所述。具体就是proc sort data=have nodupkey out=nodu dupout=dups; by key1 key2; run; 其中out=nodu输出的数据集中出现了duplicate key1 and key2,只保留了first.key1 or first.key2,而dupout=dups输出了除first.key1 or first.key2之外的其余duplicate key1 and key2. 但实际做数据时,需要弄清楚哪些key1和key2,出现了重复,以及对于重复key1 and key2的观测到底该如何取舍。所以我想要的是把所有出现key1 and key2重复的观测全部输出,包括第一次出现的第一条观测。如下数据,我希望输出的数据集是这样的,其中a和b分别是key1和key2.
我希望得到的结果;

a b c
4 4 4
4 4 5
4 5 6
4 5 .

原始数据创建;
data aa;
        input a b c;
        cards;
        2 2 3
        4 5 6
        4 4 4
        4 4 5
        4 5 .
        7 7 8
        9 5 5
        ;
run;

以下是我写的code及结果运行结果,都没有实现我想要的结果,求高手解答;
proc sort data=ex nodupkey out=nodu dupout=dups;
        by a b;
run;
proc sql;
        create table dupkeys as
        select d.*,e.*
        from nodu as d, dups as e
        where d.a=e.a and d.b=e.b;
quit;

结果:
a b c
4 4 4
4 5 6


或者data bb;
        merge nodu(in=x) dups(in=y);
        by a b;
        if x and y;
run;
结果:
a b c
4 4 5
4 5 .

拜托坛友解答,小弟不胜感激!



最佳答案

sas那个石家庄人 查看完整内容

把dup的数据集和原数据集做个left join就好 然后select里面的c选择原数据集的c
二维码

扫码加我 拉你入群

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

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

全部回复
2015-10-4 21:51:20
复制代码


把dup的数据集和原数据集做个left join就好 然后select里面的c选择原数据集的c
二维码

扫码加我 拉你入群

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

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

2015-10-5 09:28:04
复制代码
二维码

扫码加我 拉你入群

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

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

2015-10-5 14:29:47
谢谢以上两位坛友的热心回答,我忘了可以用left join。第一位坛友的回答具有普遍性,可以一直使用。。第二位坛友的回答具体问题具体分析,更加巧妙。
二维码

扫码加我 拉你入群

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

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

2018-7-1 19:20:41
我都是这样处理的。
data aa;
input a b c;
cards;
2 2 3
4 5 6
4 4 4
4 4 5
4 5 .
7 7 8
9 5 5
;
run;
Proc sort data=aa; by a b;run;
data want;
    set aa;  by a b;
    if first.b=last.b=1 then delete;
run;
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群