我试图只保留表中一列的重复结果。这就是我所拥有的。
proc sql;
create table DUPLICATES as
select Address, count(*) as count
from TEST_TABLE
group by Address
having COUNT gt 1
;
quit;
有没有更简单的方法或我没有想到的替代方法?然后我必须将它与原始表重新加入才能得到我的答案,这似乎很愚蠢。
我试图只保留表中一列的重复结果。这就是我所拥有的。
proc sql;
create table DUPLICATES as
select Address, count(*) as count
from TEST_TABLE
group by Address
having COUNT gt 1
;
quit;
有没有更简单的方法或我没有想到的替代方法?然后我必须将它与原始表重新加入才能得到我的答案,这似乎很愚蠢。
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;
使用带有 nodupkey 和 dupout 的 proc sort 将对数据进行重复数据删除,并为您提供一个“out”数据集,其中包含来自原始数据集的重复记录,但“out”数据集不包括带有 ID 变量的每条记录 - 它为您提供了第二个、第三个,第 4 次...第 N 次。因此,当您使用此方法时,您不会比较所有重复出现的 ID 变量。当您知道要删除的内容并通过变量定义足够的内容以精确限制这一点时,或者如果您知道具有重复 ID 的记录在各个方面都是相同的并且您只是希望将它们删除,那就太好了。
当我收到的原始文件中有重复项时,我喜欢比较 ID 出现多次的所有记录。
proc sort data=test nouniquekeys
uniqueout=singles
out=dups;
by=ID;
run;
同样,这种方法非常适合处理杂乱的原始数据,以及如果您的代码可能产生重复的调试。
select field,count(field) from table
group by field having count(field) > 1