2

我试图只保留表中一列的重复结果。这就是我所拥有的。

proc sql; 
    create table DUPLICATES as 
    select Address, count(*) as count 
    from TEST_TABLE
    group by Address
    having COUNT gt 1 
    ;
quit;

有没有更简单的方法或我没有想到的替代方法?然后我必须将它与原始表重新加入才能得到我的答案,这似乎很愚蠢。

4

4 回答 4

8
proc sort data=TEST_TABLE;
    by Address;
run;

data DUPLICATES;
    set TEST_TABLE;
    by Address;
    if not (first.Address and last.Address) then output;
run;
于 2013-06-17T21:40:43.880 回答
8

使用带有 nodupkey 和 dupout 的 proc sort 将对数据进行重复数据删除,并为您提供一个“out”数据集,其中包含来自原始数据集的重复记录,但“out”数据集不包括带有 ID 变量的每条记录 - 它为您提供了第二个、第三个,第 4 次...第 N 次。因此,当您使用此方法时,您不会比较所有重复出现的 ID 变量。当您知道要删除的内容并通过变量定义足够的内容以精确限制这一点时,或者如果您知道具有重复 ID 的记录在各个方面都是相同的并且您只是希望将它们删除,那就太好了。

当我收到的原始文件中有重复项时,我喜欢比较 ID 出现多次的所有记录。

proc sort data=test nouniquekeys
     uniqueout=singles
           out=dups;
by=ID;
run;
  • nouniquekeys从“out” DS 中删除唯一观察值
  • uniqueout=dsname存储独特的观察结果
  • out=dsname存储剩余的观察结果

同样,这种方法非常适合处理杂乱的原始数据,以及如果您的代码可能产生重复的调试。

于 2016-01-12T18:45:55.720 回答
7

使用数据步骤很容易:

proc sort data=TEST_TABLE nodupkey dupout=dups; 
 by Address; 
run; 

有关详细信息,请参阅本文档

于 2013-06-18T00:29:42.337 回答
1
select field,count(field) from table 
group by field having count(field) > 1
于 2013-06-17T14:20:57.610 回答