使用名称拼写错误清理 SPSS 中的数据
Cleaning data in SPSS with name misspellings
我有一个 500 万条基本格式的记录数据集:
FName LName UniqueID DOB
John Smith 987678 10/08/1976
John Smith 987678 10/08/1976
Mary Martin 567834 2/08/1980
John Smit 987678 10/08/1976
Mary Martin 768987 2/08/1980
出生日期总是唯一的,但我遇到过以下情况:
相同 ID,不同名称拼写或不同 ID,相同名称
我已经让 SPSS 识别出具有相同 DOB 的 John Smit 和 John Smith 是同一个人,并且我使用聚合来显示在姓名附近使用拼写的次数(John Smith,10;约翰·斯密特 5).
案例一:
我想做的是遍历所有被识别为同一个人的记录,并获得该人姓名的最常见拼写并将其用作他们的标准名称。
案例二:
如果我有同一个人的多个 ID,请取最低的一个并将其作为标准。
我很乐意使用基本语法来清理我的数据,但这是我唯一坚持的事情。
如果 UniqueID
是人口中个人的真正唯一 ID,并且您想要查找名称拼写的变体(在这些 ID 的分组内)并分配模式出现,那么像这样的事情会起作用:
STRING FirstLastName (A99).
COMPUTE FirstLastName = CONCAT(FName," ", LName").
AGGREGATE OUTFILE= * MODE=ADDVARIABLES /BREAK=UniqueID FirstLastName /Count=N.
AGGREGATE OUTFILE= * MODE=ADDVARIABLES /BREAK=UniqueID /MaxCount=MAX(Count).
IF (Count<>MaxCount) FirstLastName =$SYSMIS.
AGGREGATE OUTFILE= * MODE=ADDVARIABLES OVERWRITE=YES /BREAK=UniqueID /FirstLastName=MAX(FirstLastName).
然后您也可以覆盖 FName
和 LName
字段,但是必须做出更多假设,例如,如果 FName
或 LName
可以包含 space 个字符等
我最终以一种似乎非常复杂的方式解决了所有这些问题。但是,最后,我能够解决所有问题,并且我对最终数据库所做的健全性检查都没有问题。
@Jignesh,我最终使用了您的一些代码。谢谢。
我有一个 500 万条基本格式的记录数据集:
FName LName UniqueID DOB
John Smith 987678 10/08/1976
John Smith 987678 10/08/1976
Mary Martin 567834 2/08/1980
John Smit 987678 10/08/1976
Mary Martin 768987 2/08/1980
出生日期总是唯一的,但我遇到过以下情况: 相同 ID,不同名称拼写或不同 ID,相同名称
我已经让 SPSS 识别出具有相同 DOB 的 John Smit 和 John Smith 是同一个人,并且我使用聚合来显示在姓名附近使用拼写的次数(John Smith,10;约翰·斯密特 5).
案例一: 我想做的是遍历所有被识别为同一个人的记录,并获得该人姓名的最常见拼写并将其用作他们的标准名称。
案例二: 如果我有同一个人的多个 ID,请取最低的一个并将其作为标准。
我很乐意使用基本语法来清理我的数据,但这是我唯一坚持的事情。
如果 UniqueID
是人口中个人的真正唯一 ID,并且您想要查找名称拼写的变体(在这些 ID 的分组内)并分配模式出现,那么像这样的事情会起作用:
STRING FirstLastName (A99).
COMPUTE FirstLastName = CONCAT(FName," ", LName").
AGGREGATE OUTFILE= * MODE=ADDVARIABLES /BREAK=UniqueID FirstLastName /Count=N.
AGGREGATE OUTFILE= * MODE=ADDVARIABLES /BREAK=UniqueID /MaxCount=MAX(Count).
IF (Count<>MaxCount) FirstLastName =$SYSMIS.
AGGREGATE OUTFILE= * MODE=ADDVARIABLES OVERWRITE=YES /BREAK=UniqueID /FirstLastName=MAX(FirstLastName).
然后您也可以覆盖 FName
和 LName
字段,但是必须做出更多假设,例如,如果 FName
或 LName
可以包含 space 个字符等
我最终以一种似乎非常复杂的方式解决了所有这些问题。但是,最后,我能够解决所有问题,并且我对最终数据库所做的健全性检查都没有问题。
@Jignesh,我最终使用了您的一些代码。谢谢。