Sas 只保留副本

Sas 只保留副本,sas,Sas,我试图只保留表中一列的重复结果。这就是我所拥有的 proc sql; create table DUPLICATES as select Address, count(*) as count from TEST_TABLE group by Address having COUNT gt 1 ; quit; 有没有更简单的方法,或者我没有想到的其他方法?然后我不得不将其与原始表重新连接以获得我的答案,这似乎很愚蠢。使用数据步骤很容易: s

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

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

有没有更简单的方法,或者我没有想到的其他方法?然后我不得不将其与原始表重新连接以获得我的答案,这似乎很愚蠢。

使用数据步骤很容易:

select field,count(field) from table 
group by field having count(field) > 1
proc sort data=TEST_TABLE nodupkey dupout=dups; 
 by Address; 
run; 

有关更多信息,请参阅此部分

使用带有nodupkey和dupout的proc sort将重复数据,并为您提供一个“out”数据集,其中包含来自原始数据集的重复记录,但“out”数据集不包括具有ID变量的所有记录-它将为您提供第2、第3、第4…第n个记录。因此,在使用此方法时,不会比较ID变量的所有重复出现。如果您知道要删除的内容,并通过变量定义了足够多的内容来精确地限制这一点,或者您知道具有重复ID的记录在各个方面都是相同的,并且您只想删除它们,那么这将是非常棒的

当我收到的原始文件中存在重复项时,我喜欢比较ID不止一次出现的所有记录

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

同样,这种方法对于处理杂乱的原始数据以及调试代码是否产生了重复数据非常有用。

使用proc sort with“dupout=”是消除重复数据的一种好方法,但它不能让您很好地查看相邻的所有重复记录。根据我的经验,复制品是我在前一步做错的事情的结果,所以我想看看我做错了什么,而不仅仅是修复它。或者,如果实际数据我想查看所有重复键记录的相似性和差异性,这样我就可以决定如何处理(例如,可能按键聚合)。您的解决方案是否会从输出中删除第一行和最后一行。i、 如果我有5行具有相同的地址,它将只显示第2-4行。我对
感到困惑,如果不是(first.Address和last.Address),则输出你能详细说明这行是什么吗?为了帮助初学者,考虑添加PROC前缀和后缀:PROC SQL;按计数(字段)>1的字段从表组中选择字段、计数(字段);
proc sort data=test nouniquekeys
     uniqueout=singles
           out=dups;
by=ID;
run;