只保留重复

Sky*_*ler 2 sas

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

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

有没有更简单的方法来做这个或我没想到的替代方案?看起来很狡猾,然后我必须重新加入原始表格以获得我的答案.

DCW*_*ods 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;
Run Code Online (Sandbox Code Playgroud)

  • 使用proc sort与"dupout ="是一种重复数据删除的好方法,但它不能让你很好地查看彼此相邻的所有重复记录.根据我的经验,重复是我在前一步做错的结果,所以我想看看我做错了什么,而不仅仅是解决它.或者,如果实际数据我想看到所有重复密钥记录的相似性和差异,那么我可以决定如何处理(例如,可能通过密钥聚合). (3认同)

JMQ*_*JMQ 8

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

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

proc sort data=test nouniquekeys
     uniqueout=singles
           out=dups;
by=ID;
run;
Run Code Online (Sandbox Code Playgroud)
  • nouniquekeys从"out"DS中删除独特的观察结果
  • uniqueout = dsname存储唯一的观察结果
  • out = dsname存储剩余的观察结果

同样,这种方法非常适合处理凌乱的原始数据,并且如果您的代码可能产生了重复数据,则可以进行调试.


isJ*_*tMe 7

使用数据步骤很容易:

proc sort data=TEST_TABLE nodupkey dupout=dups; 
 by Address; 
run; 
Run Code Online (Sandbox Code Playgroud)

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