全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SPSS论坛
17379 2
2012-04-09
* 今天发现SPSS原来有专门的查重功能,不过思路比SAS复杂多啦,从下面的语法就可以看得出来,不过菜单很简单,Data--Identify dulplicate cases.
* 利用菜单可以实现以一个为关键变量(如ID)来查重,也可以实现根据两个变量确定的查重(如下面2中的name和age).
* 发现重复记录的删除方法是select cases,不过过程有点绕,不是直选中要接删除的记录,而是选中不要删除的记录,所以得注意.
* 举一个例子说明上述功能.

ID

name

age

1

chen

24

2

li

45

3

li

45

4

he

43

4

John

65

5

tom

23

6

lily

67


.

* 1. 以ID为关键变量查重.
SORT CASES BY ID(A).
MATCH FILES
  /FILE=*
  /BY ID
  /FIRST=PrimaryFirst
  /LAST=PrimaryLast.
DO IF (PrimaryFirst).
COMPUTE  MatchSequence=1-PrimaryLast.
ELSE.
COMPUTE  MatchSequence=MatchSequence+1.
END IF.
LEAVE  MatchSequence.
FORMATS  MatchSequence (f7).
COMPUTE  InDupGrp=MatchSequence>0.
SORT CASES InDupGrp(D).
MATCH FILES
  /FILE=*
  /DROP=PrimaryFirst InDupGrp MatchSequence.
VARIABLE LABELS  PrimaryLast 'Indicator of each last matching case as Primary'.
VALUE LABELS  PrimaryLast 0 'Duplicate Case' 1 'Primary Case'.
VARIABLE LEVEL  PrimaryLast (ORDINAL).
FREQUENCIES VARIABLES=PrimaryLast.
EXECUTE.


* 删除重复记录.
FILTER OFF.
USE ALL.
SELECT IF (PrimaryLast = 1).
EXECUTE.


* 2. 以name和age定义重复记录.
SORT CASES BY name(A) age(A).
MATCH FILES
  /FILE=*
  /BY name
  /FIRST=PrimaryFirst
  /LAST=PrimaryLast.
DO IF (PrimaryFirst).
COMPUTE  MatchSequence=1-PrimaryLast.
ELSE.
COMPUTE  MatchSequence=MatchSequence+1.
END IF.
LEAVE  MatchSequence.
FORMATS  MatchSequence (f7).
COMPUTE  InDupGrp=MatchSequence>0.
SORT CASES InDupGrp(D).
MATCH FILES
  /FILE=*
  /DROP=PrimaryFirst InDupGrp MatchSequence.
VARIABLE LABELS  PrimaryLast 'Indicator of each last matching case as Primary'.
VALUE LABELS  PrimaryLast 0 'Duplicate Case' 1 'Primary Case'.
VARIABLE LEVEL  PrimaryLast (ORDINAL).
FREQUENCIES VARIABLES=PrimaryLast.
EXECUTE.




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2015-12-8 08:29:43
Data菜单下有一个“Identifying Duplicate Cases”的程序,应该可以解决你的问题。但我没有用过那个程序,而是用下述的syntax写一个程序来做,
  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.
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-12-8 08:30:14
Data菜单下有一个“Identifying Duplicate Cases”的程序,应该可以解决你的问题。但我没有用过那个程序,而是用下述的syntax写一个程序来做,
  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.
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群