遇到这种情况,如果采用SPSS合并数据库的话,会出现一些意想不到的问题。首先,遇到重复ID,利用SPSS早期版本很难发现这一问题,直接提示不能合并,至少自己见过的SPSS 16是发现不了。目前自己所用的SPSS 19(不清楚17和18是否)可以发现此问题,并给出如下提示:
MATCH FILES /FILE=*
/FILE='C:\Users\Administrator\Desktop\**.sav'
/BY ID.
EXECUTE.
File #2
KEY: 1E+013
>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来查重,并最终合并多个数据库。
采用SAS解决开始提出的问题,需要解决以下几个步骤
1、查找重复的记录数
2、核查后剔除重复的记录数
3、以一个库为主库,合并其他库
针对上述三个问题,分别以三个简单的例子来说明相关方法,
(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库中才有的而且没有缺失的变量。当然也有很多其它方法删除缺失,只要能到底目的都行。
希望这篇文章能对大家解决类似问题有所帮助。



雷达卡



京公网安备 11010802022788号







