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.