我有一个结构化的数据集,其中包含一个ID和另外两个变量。id不是唯一的,它在数据集中出现了1次以上(一个患者可以接受多个临床治疗).How只有当它是先前观察的完美克隆(基于另外两个变量值)时,我才能删除整个观察(整行)吗?我不想使用冗长的if语句。谢谢。
发布于 2014-11-21 22:42:49
proc sql;
select distinct * from olddata;
quit;听起来像是一个简单的SQL修复。如果选择所有列,则“选择不同的”选项将删除数据集中所有完全重复的行。
发布于 2014-11-21 22:50:33
如果您特别想确定两个连续的行是否相同(但又不希望匹配由其他行分隔的相同行),则可以对by语句使用notsorted,然后对first和last变量使用notsorted。
data want;
set have;
by id var1 var2 notsorted;
if first.var2;
run;这将保留任何id/var1/var2相同的组的第一条记录,只要它们在数据集上是连续的。当然,如果您首先对dataset by id var1 var2进行排序,这将始终删除重复项,但不排序此操作仍然适用于删除并置的连续对(或更多)。
发布于 2014-11-22 00:00:01
我更喜欢@JJFord的答案,但是为了完整起见,这也可以使用proc sort中的nodupe选项来完成
proc sort data=mydata nodupe;
by id;
run;您选择什么作为by变量在这里并不重要。重要的一点是指定nodupe选项。
https://stackoverflow.com/questions/27063324
复制相似问题