SAS数据集中重复数据的处理方法
在使用SAS在处理数据的时候,经常会遇到或产生一些重复数据,有些重复数据是我们需要的,而有的则是多余的。下面讲到的内容就是筛选/排除某一数据集里重复数据以及去重的几种常用方法。
测试数据如下:
TARGET 1: 保留不重复数据/保留重复数据
方法1:DATA STEP
/*根据ID排序*/
proc sort data=ID;
by ID;
run;
/*保留不重复ID*/
dataID_1;
setID;
byID;
if first.ID = last.ID =1;
run;
/*保留重复ID*/
dataID_2;
setID;
byID;
if ^(first.ID = last.ID =1) ;
run;
方法2:PROC SQL
/*保留唯一的ID*/
proc sql;
create tableid_3as
selecta.*fromID a,
(selectID,count(1)asID_cntfromID
group byID
having ID_cnt=1) b
wherea.ID=b.ID;
quit;
/*保留非唯一的ID*/
proc sql;
create tableid_4as
selecta.*fromID a,
(selectID,count(1)asID_cntfromID
group byID
having ID_cnt>1) b
wherea.ID=b.ID;
quit;
方法3:PROC FREQ
/*保留唯一的ID*/
proc freqdata=IDnoprint;
tableID /out=id_5 (keep = ID Count where = (Count = 1)) ;
run;
/*保留非唯一的ID*/
proc freqdata =IDnoprint;
tableID /out=id_6 (keep = ID Count where = (Count > 1)) ;
run;
TARGET 2: 数据集去重
方法1:PROC SORT
/*根据ID去重*/
proc sortdata=IDnodupkey out=ex1;
byID ;
run;
注:此处使用nodup与nodupkey会产生相同结果,但实际应用中它们存在一定差异,其主要区别在于:
NODUPKEY去除关键字 by ID相同的数据
NODUP去除observation完全相同的记录,但是相同的记录必须相邻
方法2:PROC SQL
/*根据ID去重*/
proc sql;
create tableex2as
select distinctIDfromID;
quit;
方法3:DATA STEP
/*根据ID排序*/
proc sort data=ID;
by ID;
run;
/*根据ID去重*/
dataex3;
setID;
byID;
iffirst.IDthen outputex3;
run;
数据分析咨询请扫描二维码