只保留重复

时间:2013-06-17 14:17:44

标签: sas

我正在尝试仅保留表中一列的重复结果。这就是我所拥有的。

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

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

4 个答案:

答案 0 :(得分: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;

答案 1 :(得分:8)

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

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

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

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

答案 2 :(得分:7)

使用数据步骤很容易:

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

有关详细信息,请参阅此documentation

答案 3 :(得分:1)

select field,count(field) from table 
group by field having count(field) > 1