2009-08-02

如何在SPSS里删除重复ID的个案?

L @ 2009-08-01:

如果在SPSS数据库里有一个变量是对case的编号,现在有可能某些case 是重复出现的,我想要将重复出现的case只保留一个,其余重复则删除掉,怎么完成这个任务?(除了手动的以外。)

庄主 @ 2009-08-02:

SPSS13版或之后的Data菜单下有一个“Identifying Duplicate Cases”的程序,应该可以解决你的问题。但我没有用过那个程序,而是用下述的syntax写一个程序来做,自己写的程序放心一点,不会错杀无辜的个案。(注:以下syntax其中的“ROW”和“ROW2”是两个临时变量,事后可以删去。如果你case的编号变量名不叫“ID”,请修改ID。)

sort cases by ID.
compute ROW=$casenum.
aggregate outfile 'c:\temp.sav'/break ID/ROW2=first(ROW).
match files file */table 'c:\temp.sav'/by ID.
select if ROW=ROW2.
delete variable ROW ROW2.
exe.

强烈建议你运行前,请先用下述模拟数据试一下,以检验上述程序是否对(即没有放过任何需要删的个案、也没有错删任何需要保留的个案)。

input program.
loop #i=1 to 10.
loop #j=1 to 3.
compute ID=#i.
end case.
end loop.
end loop.
end file.
end input program.
sort cases by ID.
compute ROW=$casenum.
aggregate outfile 'c:\temp.sav'/break ID/ROW2=first(ROW).
match files file */table 'c:\temp.sav'/by ID.
select if ROW=ROW2.
delete variable ROW ROW2.
exe.

数据a 数据b 数据c 数据d
image image image image

上述syntax的第1-11句生成一个含有两个变量(ID和ROW)、30个个案(其中仅10个独立个案,但每个个案重复3次)的数据(见下图数据a)。第12句将数据a中每三个重复个案中的第一条记录的ID和行序号ROW抽出来保存到临时文件temp.sav中(见数据b)。第13句将数据a和数据b合并成数据c。第14句将数据c中的ROW(即数据a中的行序号)与ROW2(即数据b中的每个个案第一行的行序号)相等者选出;也就是说,将ROW和ROW2不相等者(即每个个案的重复行)删除。最后,第15句将临时变量ROW和ROW2删除,结果就是你想要的数据d。