1. 程式人生 > 實用技巧 >使用PQ整理SPSS中錯錄入的多選題選項

使用PQ整理SPSS中錯錄入的多選題選項

這個案例的場景是:我進行了一個問卷調研,其中題目Q2是一個多選題,一共有10選項,分別是Q2.1、Q2.2,…,Q2.10,由於錄入人員在SPSS中錄入時,選項被錯誤的錄入,如下第1張圖所示。錄入人員依次從左至右,錄入的是選項的序號值,而不是對應標題,用1表示選中,用0表示未選中,最終正確的錄入結果應該是如下第2張圖所示(這在SPSS中可以建立基於二分類的多重響應集,以便對多選題進行分析)。

由於樣本行數很多,重新一行一行修改很不現實。現需要使用PQ將原始多選項的資料轉換成上圖的結果

操作實現:

  1. 首先我們選中原始資料的問卷號列,然後進行“逆透視其他列”

  2. 接下來再按問卷號進行分組,分組不要聚合,得到所有行。

  3. 然後我們需要修改上一步分組的程式碼,修改了子表列的生成方式,程式碼如下所示。
  4. = Table.Group(逆透視其他列, {"問卷號"}, {{"子表", (t)=> 
        List.Generate(
            ()=>[ID=1,KEY="Q2."&Text.From(t{0}[值]),VALUE=1],
            each [ID]<=Table.RowCount(t),
            each [ID=[ID]+1,KEY="Q2."&Text.From(t{[ID]}[值]),VALUE=1
    ], each _ ) }})

    其中主要使用到了List.Generate,該函式我在另一篇博文按總期數為每期生成獨立行資料(金融應用)中已經詳細說明過,這裡就不再多做說明,只是解釋一下整個修改的部分的含義。

    我使用List.Generate來生成一個每個元素都是Record的列表,每個Record都有三個鍵值對,ID,KEY,VALUE。ID是一個數字遞增序號,KEY將會根據原來表中的值重新確定其對應的題號,例如假設值為4,那麼它表示Q2.4這個選項被選中了,KEY就是Q2.4這個題號,而VALUE則是表示是否選中,1是選中,0是沒選中,我們這裡直接等於,因為在沒選中情況下,原來的資料裡面是空的,而PQ進行逆透視時,已經自動過濾掉了這些空值,所以一旦在子表列裡的行,其中的值列必定不會為空。

    此時我們會得到如下所示的結果,子表列中,每個元素都是一個List,List中則包含的是Record,可能會有多個Record也可能只有一個Record


  5. 上一步的結果圖中,我們只能看到List中包含了Record,但是具體Record有些什麼內容我們不知道,所以我們需要展開子表列,來檢視

  6. 接下來我們還需要繼續將Record也進行展開,點選子表列右側按鈕,取消ID列的勾選,然後展開即可
  7. 接下來我們選中問卷號列,進行透視列操作
  8. 我們發現,透視完畢後,列的順序是混亂的,因此我們需要將上一步透視列操作中,公式的第二個引數替換成我們需要順序的列表,以下分別是修改前和修改後的程式碼
  9. = Table.Pivot(展開記錄, List.Distinct(展開記錄[KEY]), "KEY", "VALUE")
    = Table.Pivot(展開記錄, {"Q2.1", "Q2.2", "Q2.3", "Q2.4", "Q2.5", "Q2.6", "Q2.7", "Q2.8", "Q2.9", "Q2.10"}, "KEY", "VALUE")
  10. 最後我們需要將結果中null值全部替換為0以表示未選擇(SPSS分析需要),選中Q2.1到Q2.10列,然後依次按圖中序號操作替換