Skip to content

12.2 AUTORECODE ​

AUTORECODE VARIABLES=src_vars INTO dest_vars
        [ /DESCENDING ]
        [ /PRINT ]
        [ /GROUP ]
        [ /BLANK = {VALID, MISSING} ]

AUTORECODE 过程考虑一个变量所取的 n 个值,并将它们映射到新数值变量上的值 1…n。

VARIABLES 子命令是唯一必需的子命令,且必须排在第一位。指定 VARIABLES、等号(‘=’)、源变量列表、INTO,以及目标变量列表。源变量和目标变量的数量必须相同。目标变量必须尚未存在。

AUTORECODE 通常将源变量的每个递增的非缺失值(对于字符串,基于字符编码比较)赋给其目标变量的连续取值。例如,源变量的最小非缺失值被重编码为 1,次小的为 2,依此类推。如果源变量有用户缺失值,它们会被重编码为紧接在非缺失值之上的连续取值。例如,如果源变量有七个不同的非缺失值,则最小的缺失值会被重编码为 8,次小的为 9,依此类推。

使用 DESCENDING 可反转非缺失值的排序顺序,使最大的非缺失值被重编码为 1,第二大为 2,依此类推。即使使用 DESCENDING,用户缺失值仍按升序重编码为紧接在非缺失值之上的取值。

系统缺失值总是被重编码为目标变量中的系统缺失值。

如果源值有值标签,则该值标签会保留给目标变量中的新值。否则,源值本身成为每个新值的标签。

变量标签从源变量复制到目标变量。

PRINT 当前被忽略。

GROUP 子命令仅当要对多个变量重编码时相关。它使源值与目标值之间使用单一的映射,而不是每个变量各用一张映射表。使用 GROUP 时,用户缺失值取自第一个含有任何用户缺失值的源变量。

如果给定 /BLANK=MISSING,则仅包含空白的字符串变量被重编码为 SYSMIS。如果指定 /BLANK=VALID,则它们像其他值一样被分配一个取值。/BLANK 与数值无关。/BLANK=VALID 为默认值。

AUTORECODE 是一个过程。它会导致数据被读取。它会忽略 TEMPORARY(参见 TEMPORARY),因此“临时”转换会变成永久转换。

12.2.1 自动重编码示例 ​

在文件 personnel.sav 中,变量 occupation 是一个字符串变量。除纯注释性质的数据外,字符串变量通常不是一个好选择。原因之一是数据录入错误很容易被忽略。这在 personnel.sav 中就发生了:本应录入“Scientist”的一项被误录为“Scrientist”。在示例 12.2 中,首先通过 DO IF 子句纠正该错误(3),然后使用 AUTORECODE 创建一个新数值变量,其取值为 occupation 的重编码值。最后,删除旧变量,并将新变量重命名为旧变量的名称。

get file='personnel.sav'.  * Correct a typing error in the original file. do if occupation = "Scrientist".  compute occupation = "Scientist". end if.  autorecode 	variables = occupation into occ 	/blank = missing.  * Delete the old variable. delete variables occupation.  * Rename the new variable to the old variable's name. rename variables (occ = occupation).  * Inspect the new variable. display dictionary /variables=occupation.

示例 12.2: 在纠正数据录入错误后,使用 AUTORECODE 将字符串变量转换为数值变量

截图 12.1: 自动重编码对话框,设置为将 occupation 重编码为 occ

注意在结果 12.1 中,新变量已被自动分配了与旧变量字符串相对应的取值标签。这意味着在未来的分析中,会报告这些描述性字符串,而不是数值。

NamePositionMeasurement LevelRoleWidthAlignmentPrint FormatWrite Format
occupation6UnknownInput8RightF2.0F2.0
Variable ValueLabel
occupation1Artist
2Baker
3Barrister
4Carpenter
5Cleaner
6Cook
7Manager
8Mathematician
9Painter
10Payload Specialist
11Plumber
12Scientist
13Tailor

结果 12.1: AUTORECODE 之后 occupation 变量的属性

脚注 ​

(3) ​

在纠正此类数据录入错误时,必须谨慎,而不是简单地将其标记为缺失。例如,如果某个职业被录入为“Barister”,这个人是指“Barrister”还是指“Barista”?

基于 GNU PSPP 2.0.1 手册与入门教程整理