我有一个带有ID和其他两个变量的数据集。 id不是唯一的,它在数据集中出现超过1次(患者可以接受多次临床治疗)。如果它是先前观察的完美克隆,我怎样才能丢弃整个观察(整条线) (基于另外两个变量值)?我不想使用疯狂的if语句。 感谢。
答案 0 :(得分:3)
proc sql;
select distinct * from olddata;
quit;
听起来像一个简单的SQL修复程序。如果选择所有列,则select distinct选项将删除数据集中任何完全重复的行。
答案 1 :(得分:0)
如果您特别想要确定两个连续的行是否相同(但不希望匹配由其他行分隔的相同行),则可以在by语句上使用notsorted
,然后first
last
变量。
data want;
set have;
by id var1 var2 notsorted;
if first.var2;
run;
这将保留任何相同id / var1 / var2组的第一条记录,只要它们在数据集上是连续的。当然,如果您首先对数据集by id var1 var2
进行排序,这将始终删除重复项,但不进行排序,这仍然适用于删除并置的连续对(或更多)。
答案 2 :(得分:0)
我更喜欢@JJFord的回答,但为了完整起见,也可以使用nodupe
中的proc sort
选项来完成:
proc sort data=mydata nodupe;
by id;
run;
您选择的by
变量并不重要。重要的是指定nodupe
选项。