2014-11-21 89 views
1

我有一个数据集与ID和两个其他变量结构。 这个id不是唯一的,它在数据集中出现超过1次(患者可以接受一次以上的临床治疗)。我如何才能放弃整个观察(整条线),只要它是以前的完美克隆观察(基于其他两个变量值)?我不想用一个非常长的if语句。 谢谢。SAS下降克隆观察

+0

以前的具体观察结果(例如,如果obs 9是obs 8的重复),还是先前的观察结果? – Joe 2014-11-21 14:48:26

回答

3
proc sql; 
select distinct * from olddata; 
quit; 

听起来像一个简单的SQL修复。如果选择所有列,select distinct选项将删除数据集中所有完全重复的行。

+2

如果你想创建一个输出数据集,在'select'之前添加'create table newdata as'。 – Leo 2014-11-21 15:17:42

0

如果你特别希望确定是否连续两行是相同的(但不打算匹配其他线路分开相同的行),您可以通过语句中使用一个notsorted,然后firstlast变量。

data want; 
    set have; 
    by id var1 var2 notsorted; 
    if first.var2; 
run; 

只要它们在数据集上是连续的,就会为任何相同的id/var1/var2组保留第一条记录。当然,如果您首先对数据集by id var1 var2进行排序,这将始终删除重复项,但未排序,仍然适用于删除并置的连续对(或多个)。

0

我喜欢@ JJFord的答案,但为了完整起见,这也可以使用nodupe选项proc sort完成:

proc sort data=mydata nodupe; 
    by id; 
run; 

你选择作为by变量是什么其实并不重要这里。重要的一点就是指定nodupe选项。