5.6 数据的重新编码
当需要对统计资料的某些变量进行分组处理,或需要改变变量的值或数据类型时,可以利用SPSS的重新编码(Recode)功能直接改变变量的值,指定分组;或利用数据的自动重新编码(Automatic Recode)功能转换数据的类型。例如对不同的年龄段、不同的成绩区间进行分组等。
5.6.1 数据的重新编码
变量的数据改变后,既可以直接覆盖原变量,也可以重新创建一个变量,保存改变以后的变量值。针对这两种不同情况,数据的重新编码功能可分为在相同变量中重新编码和在不同变量中重新编码两种。
5.6.1.1 在相同变量中重新编码
变量的值改变以后直接覆盖原变量;或者变量重新分组以后,直接将分组信息覆盖原变量。操作步骤如下:
step 1 打开重新编码对话框。
选择菜单“Transform”→“Recode into Same Variables”命令,打开“Recode into Same Variables”(相同变量中重新分组)对话框,如图5.17所示。
图5.17 “Recode into Same Variables”(相同变量中重新分组)对话框
step 2 选择分组变量。
在左边的变量列表框中选择变量名,单击右向箭头按钮,将变量移动至右侧的“Numeric Variables”窗口。
step 3 设置“Old and New Values”子对话框。
单击“Old and New Values”按钮,打开如图5.18所示的“Recode into Same Variables:Old and New Values”(相同变量中重新分组:原值和新值)对话框。
图5.18 “Recode into Same Variables:Old and New Values”(相同变量中重新分组:原值和新值)对话框
在该对话框的“Old Value”窗口中,定义了改变所选变量值的7种方法,对应7个单选框,含义如下:
◆ VaIue 选择该项,在输入框中输入需要改变的原变量值。
◆ System-missing 选择该项,表示将系统缺失值作为需要改变的变量值。
◆ System-or user-missing 选择该项,表示将系统或者用户缺失值作为需要改变的变量值。
◆ Range 选择该项,表示指定原变量的改变区间。在第一个输入框选择区间下限,第二个输入框选择区间上限。
◆ Range. LOWEST through vaIue 选择该项,指定需要改变的变量值在变量的最小值和当前输入值之间。
◆ Range. vaIue through HIGHEST 选择该项,指定需要改变的变量值在当前输入值和变量的最大值之间。
◆ AII other vaIues 若上面方法中没有指定的变量值,可以选择此项,指定为某一确定值。
选择需要改变的值的范围及相应输入值后,需要确定新的取值。在右侧“New Value”窗口内有两个单选项:
◆ VaIue 在后面的输入栏中直接输入对应的新值。
◆ System-missing 将系统缺失值作为改变以后的值。
选择完毕后,单击右侧的“Add”按钮,使之原值和改变后的值进入“Old→New”窗口。如果需要改变的值多于一组,则重复以上步骤。
单击“Continue”按钮,确认改变值的设置,同时返回至“Recode into Same Variables”主对话框。
step 4 设置“lf”子对话框
在“Recode:into Same Variables”主对话框中,单击“lf”按钮,进入“Recode into Same Variables:lf Cases”(相同变量中重新分组:如果个案)子对话框,如图5.19所示。选择满足指定条件的个案进行操作。设置完毕后,单击“Continue”按钮,返回至“Reocde:lnto Same Variables”主对话框。
图5.19 “Recode into Same Variables:lf Cases”(相同变量中重新分组:如果个案)子对话框
关于利用“If Cases”对话框选择个案的方法,在前文中已经介绍过多次。请参考5.4.1节图5.8“Select Cases:If”(选择个案:如果)对话框的用法。
step 5 单击“OK”按钮,执行重新编码操作。
5.6.1.2 在不同变量中重新编码
变量的值或类型更改以后,或将变量重新分组以后,需要重新创建一个新变量来保存改变值或分组值。
step 1 打开主对话框。
选择菜单“Transform”→“Recode into Different Variables”命令,打开“Recode into Different Variables”(不同变量中重新分组)对话框,如图5.20所示。
图5.20 “Recode into Different Variables”(不同变量中重新分组)对话框
step 2 选择分组变量。
在左边的变量列表框中选择变量,单击右向箭头按钮,将改变量移动至右侧的“Numeric Variable→Output Variable”窗口中。
step 3 定义变量标签。
在右侧的“Output Variable”窗口定义新变量名和变量标签,给出两个选项:
◆ Name 输入新变量名。
◆ LabeI 输入新变量标签。
设置完毕后,单击“Change”按钮,确认操作。
step 4 设置“Old and New Values”子对话框。
单击“Old and New Values”按钮,弹出如图5.21所示的“Recode into Different Variables:Old and New Values”(不同变量中重新分组:原值和新值)对话框。此对话框的构成和上面的“Recode into Same Variables:Old and New Values”对话框略有不同。
图5.21 “Recode into Different Variables:Old and New Values”(不同变量中重新分组:原值和新值)对话框
在该对话框的“Old Value”窗口中,给出了定义改变所选变量的值的7种方法,对应7个单选框,含义如下:
◆ VaIue 选择该项,在输入框中输入需要改变的原变量值。
◆ System-missing 选择该项,表示将系统缺失值作为需要改变的变量值。
◆ System-or user-missing 选择该项,表示将系统或用户缺失值作为需要改变的变量值。
◆ Range 选择该项,表示指定原变量的改变区间。在第一个输入框输入区间下限,第二个输入框输入区间上限。
◆ Range,LOWEST through vaIue 选择该项,指定需要改变的变量值在变量的最小值和当前输入值之间。
◆ Range,vaIue through HIGHEST 选择该项,指定需要改变的变量值在当前输入值和变量的最大值之间。
◆ AII other vaIues 若上面方法中没有指定的变量值,可以选择此项,指定为某一确定值。
选择需要改变的值的范围及相应输入值后,需要确定新的取值。在右侧“New Value”窗口内有3个单选框:
◆ VaIue 在此窗口内直接输入对应的新值作为新变量的值。
◆ System-missing 用系统缺失值作为新变量的值。
◆ Copy oId vaIue(s) 直接复制原值作为新变量的值。
选择完毕后,单击右侧的“Add”按钮,使之原值和改变后的值进入“Old→New”窗口。
如果需要改变的值多于一组,则重复以上步骤。
关于字符型变量的转换。在对话框的右下侧给出了关于字符型变量的两个选项:
◆ Output variabIes are strings 选择该项,表示新变量为字符型变量,默认变量长度为8。
◆ Convert numeric strings to numbers 选择该项,表示把字符型变量转换为数值型变量,将原变量中含有数字和正负号以外字符的变量值转换为系统缺失值。
单击“Continue”按钮,确认改变值的设置,同时返回至“Recode into Different Variables”主对话框。
step 5 设置“lf”子对话框。
在“Recode into Different Variables”主对话框中,单击“lf”按钮,进入“Recode into Different Variables:lf Cases”(不同变量中重新分组:如果个案)子对话框。选择满足指定条件的个案进行操作。设置完毕后,单击“Continue”按钮,返回至“Recode into Different Variables”主对话框。
step 6 单击“OK”按钮,执行重新编码操作。
在同一变量下执行重新编码操作时,新旧变量的类型必须相同(数值型或者字符型);而在不同变量中执行重新编码操作时,既可以将数值型变量转换为字符型变量,也可以将字符型变量转换为数值型变量。但对于字符型变量转换为数值型变量的情况,“Old Value”只能选择“System-or user-missing”,“New Value”只能选择“System-missing”。
5.6.2 数据的自动重新编码
数据自动重新编码就是将字符型变量或数值型变量转换成连续的整数。在很多统计分析过程中,如果分组变量不连续,系统会自动产生空白格,从而增加系统的内存需求,降低系统运行的速度。另外,SPSS的一些过程要求因素水平必须为连续的整数,或者为数值型变量。
SPSS的自动重新编码功能是根据分组变量重新产生一新的变量。新变量将保留原变量标签和变量值标签,同时新变量的值按原变量的顺序重新赋予从1开始的连续整数值。对于无变量值标签的分组变量,新变量将原变量值作为新变量的变量值标签;字符型变量按照字符串或者中文拼音字符串的顺序进行重新编码;大写字母优先于小写字母。
自动重新编码(Automatic Recode)的具体操作步骤如下:
step 1 打开主对话框。
选择菜单“Transform”→“Automatic Recode”命令,打开“Automatic Recode”对话框,如图5.22所示。
图5.22 “Automatic Recode”对话框
step 2 选择分组变量。
在左边的变量列表框中选择变量名,单击右向箭头按钮,将改变量移动至右侧的“Variable→New Name”窗口中。
在右侧的“New Name”窗口输入新变量名,然后,单击输入框下面的“Add New Name”按钮,确认设置。
step 3 指定重新编码的顺序。
“Recode Starting from”(重新编码的起始个案)窗口中给出两个单选项:
◆ Lowest vaIue 默认选项。按递增顺序重新编码。
◆ Highest vaIue 按递减顺序重新编码。
step 4 选择重新编码的适用范围和缺失值。
在对话框的下方,给出了两个分别关于编码方案和字符串变量的选项:
◆ Use the same recoding scheme for aII variabIes 将当前自动重新编码的方案应用到所有的选择变量中。
◆ Treat bIank string vaIues as user-missing 选择此项,进行重新编码时,字符型变量的空字符被视为用户缺失值,编码时空字符的顺序优先于其他所有字符值。如果不选此项,空字符将被正常编码。
step 5 自动重新编码的模板设置。
“Template”窗口中给出了两个关于自动编码模板的单选框:
◆ AppIy tempIate from 利用模板对当前选择的变量进行自动重新编码。
◆ Save tempIate as 将当前对选择变量的自动重新编码方案保存到外部的模板文件中。选择此项,“File”按钮将被激活,单击“File”按钮,指定保存自动编码模板文件的位置。
5.6.3 重新编码的应用实例
下面用5.3.2节中的例子来说明重新编码和自动重新编码的基本操作和计算结果。(数据文件:compute.sav)
表5.3中列出某高校考生提前录取的招生成绩表。现提出如下问题:
问题1 欲将综合成绩作为分组变量。分组规则为:0~59、60~89、90~119、120~139、140~150,并要求将分组信息显示在原变量位置上。
问题2 按汉族和少数民族考生分成两组,在数据表中将分组变量表示为一个新的变量。
问题3 将20名考生的奖项作为分组变量,需要重新分组,并按照整数的连续顺序显示。
下面分别利用前面介绍的3种重新编码方法解决上述3个问题。
5.6.3.1 相同变量中重新编码的实例
问题1需要利用在相同变量中重新编码功能。具体操作步骤如下:
step 1 在当前数据窗口,选择菜单“Transform”→“Recode into Same Variables”命令,打开如图5.17所示的“Recode into Same Variables”(相同变量中重新分组)对话框。在变量列表框中,选择“综合”变量移动至“Variables”窗口。
step 2 单击“Old and New Values”按钮,打开如图5.18所示的“Recode into Same Variables:Old and New Values” (相同变量中重新分组:原值和新值)对话框。在“Old Value”窗口中选择“Range”选项,在此后给出的两个输入窗口中分别输入0和59;在“New Value”窗口中输入1,表示综合成绩在0~59的这个档次,单击“Add”按钮,确认操作;重复上述过程,分别利用新值2、3、4、5表示60~89、90~119、120~139、140~150这几个成绩区间。当输入结果全部显示在“Old→New”窗口后,单击“Continue”按钮,返回到主对话框。
step 3 单击“OK”按钮,执行相同变量中重新编码操作。
step 4 “Paste”得到的Syntax语句程序如下:
/* 在相同变量中重新编码的命令语句. RECODE 综合 (0 thru 59=1) (60 thru 89=2) (90 thru 119=3) (120 thru 139=4) (140 thru 150=5) . EXECUTE .
图5.23是重新编码前后的结果对比,经过比较后得知,在变量“综合”列中,用5个整数代表的分组代替了原来的具体成绩。
图5.23 重新编码前后的结果对比
5.6.3.2 不同变量中重新编码的实例
问题2需要利用在不同变量中重新编码功能。具体操作步骤如下:
step 1 在当前数据编辑窗口,选择菜单“Transform”→“Recode into Different Variables”命令,打开如图5.20所示的“Recode into Different Variables”对话框。在变量列表框中,选择“民族”变量移动至“Variables”窗口;在“Output Variables are Strings”窗口中输入新变量名“民族分组”,单击“Change”按钮确认。
step 2 单击“Old and New Values”按钮,打开如图5.21所示的“Recode into Different Variables:Old and New Values”对话框。在“Old Value”窗口中选择“Value”选项,并输入1,在“New Value”窗口中输入1,表示汉族仍利用数值1表示,单击“Add”按钮确认;再在“Old Value”窗口中选择“Range value through HlGHEST”选项,在输入框中输入2,在“New Value”窗口中输入2,表示用2及以上的数值表示的民族全部用2表示,即在新变量中2表示少数民族。
当输入结果全部显示在“Old→New”窗口后,单击“Continue”按钮,回到主对话框。
step 3 单击“OK”按钮,执行操作。这时,在数据编辑窗口中,新增了变量“民族分组”,将其他少数民族全部用2表示。
step 4 “Paste”得到的Syntax语句程序如下:
/* 在不同变量中重新编码的命令语句. RECODE 民族 (1=1) (2 thru Highest=2) INTO 民族分组 . EXECUTE .
5.6.3.3 自动重新编码的实例
问题3需要利用自动重新编码功能。具体操作步骤如下:
step 1 在当前数据编辑窗口,选择菜单“Transform”→“Automatic Recode”命令,打开如图5.22所示的“Automatic Recode”对话框。
step 2 在变量列表框中选择“奖项”变量移动至“Variables”窗口,“New Name”窗口输入新分组变量名“奖项分组”,单击“Add New Name”按钮确认;其他设置默认即可。
step 3 单击“OK”按钮,执行操作。
这时,在数据编辑窗口中新增变量“奖项分组”,将原来不同的“奖项”值利用升序的方式重新表示成从1开始的整数值;同时,在输出窗口输出下列自动重新编码信息:
奖项 into 奖项分组 Old Value New Value Value Label 0 1 0 1 2 1 2 3 2 3 4 3 4 5 4
从结果中可以看出,新变量的值标签为原变量的变量值,这是因为原变量没有设置变量值标签的缘故。
step 4 “Paste”得到的Syntax语句程序如下:
/* 自动重新编码的命令语句. AUTORECODE VARIABLES=奖项 /INTO 奖项分组 /PRINT.