我按ID号合并两个SAS数据集,并希望删除重复ID的所有实例,即如果在合并数据集中出现两次ID号,那么 两个观察结果将被删除
Web搜索已经提出了一些sql方法和nodupkey,但这些方法不起作用,因为它们用于典型的重复清理,其中保留一个实例,然后删除倍数。
答案 0 :(得分:4)
假设您正在使用带有BY ID的DATA步骤;声明,然后添加:
if NOT (first.id and last.id) then delete;
应该这样做。如果这不起作用,请显示您的代码。
我实际上是将删除的记录写入单独数据集的粉丝,因此您可以跟踪在不同点上删除的记录数。所以我会编写类似的代码:
data want
drop_dups
;
merge a b ;
by id ;
if first.id and last.id then output want ;
else output drop_dups ;
run ;
答案 1 :(得分:0)
这是一种SQL方法。您可以使用最适合您需要的左/右/内连接。请注意,这也适用于单个数据集。
proc sql;
create table singles as
select * from dataset1 a inner join dataset2 b
on a.ID = b.ID
group by a.ID
having count(*) = 1;
quit;
例如来自
ID x
5 2
5 4
1 6
2 7
3 6
您将选择
ID x
1 6
2 7
3 6