>Warning # 5132
>Duplicate key in a file. The BY variables do not uniquely identify each case
>on the indicated file. Please check the results carefully.
上面这个例子中,虽然SPSS提示ID有重复,可又提出了另外一个问题,可以发现,在ID号足够长的时候,如上述例子中的13位,SPSS直接采用科学计数法来提示重复的ID号,也不清楚是自己不会设置的原因还是SPSS在该程序内部自动设置科学计数的原因,反正最终我还是没能发现很好的办法让SPSS将重复的ID显示完全。这等于SPSS在对待重复ID上没有实质性的改进,而且每次只能提醒一个ID号,在有多个重复的ID号的时候,还不能一次查出来。所以建议遇到这种情况时采用SAS来查重,并最终合并多个数据库。
针对上述三个问题,分别以三个简单的例子来说明相关方法,
(1)、查找重复的记录数(转载自http://blog.sina.com.cn/s/blog_4b3c1a880100d230.html)
data b;
input id $ a b c;
cards;
001 1 2 20
002 2 3 18
003 3 4 35
004 4 5 40
002 2 3 27
006 5 6 40
004 4 5 60
;
run;
proc summary data=b nway;
class id a b;
output out=c (drop=_type_ where=(_freq_>1));
run;
proc print data=c;
run;
结果如下:
Obs id a b _FREQ_
1 002 2 3 2
2 004 4 5 2
(2)核查后剔除重复的记录数(转载自http://blog.sina.com.cn/s/blog_4b3c1a880100d230.html)
仍采用上述例子
proc sort data=b nodupkey out=d;
by id a b;
run;
proc print data=d;
run;
结果:
Obs id a b c
1 001 1 2 20
2 002 2 3 18
3 003 3 4 35
4 004 4 5 40
5 006 5 6 40
(3)、以一个库为主库,合并其他库
该问题主要是由于主库的观测数与其他要合并的数据库的观测数不一致,简单合并会导致最终合并的数据库里面出现很多缺失。也即改步主要目的是根据主库确定缺失记录,并删除缺失记录。
proc sort data=a ;
by id;
run;
……
*数据合并前记得排序;
data combined;
merge a b c;
by id;
if ax1=. then delete;
run;
其中ax1是只有a库中才有的而且没有缺失的变量。当然也有很多其它方法删除缺失,只要能到底目的都行。