spss.SplitChange 函數 (Python)

spss.SplitChange(outputName). 用於在從具有分割的資料建立樞紐表時處理分割。 引數 outputName 是與輸出相關聯的名稱,如 StartProcedure 函數的相關聯呼叫上所指定。 如需相關資訊,請參閱主題 spss.StartProcedure 函數 (Python)

  • 應該在偵測到分割並讀取新分割的第一個觀察值之後呼叫此函數。 也應該在讀取作用中資料集中的第一個觀察值之後呼叫。
  • 建立樞紐表輸出不支援涉及不同分割群組中資料的作業。 使用分割時,應該將每一個分割視為個別資料集。
  • 使用 SPLIT FILE 指令來控制分割檔案群組是顯示在相同表格還是個別表格中。 應該在 StartProcedure 函數之前呼叫 SPLIT FILE 指令。
  • Cursor 類別中的 IsEndSplit 方法用來偵測分割變更。

範例

在此範例中,會建立分割,並計算分割群組的個別平均值。 不同分割群組的結果會顯示在單一樞紐表中。 為了瞭解範例,您需要熟悉使用 BasePivotTable 類別建立樞紐表,以及使用 spss.StartProcedure 函數建立輸出。

import spss
from spss import CellText
from spss import FormatSpec

spss.Submit(r"""
GET FILE="/examples/data/employee data.sav".
SORT CASES BY GENDER.
SPLIT FILE LAYERED BY GENDER.
""")

spss.StartProcedure("spss.com.demo")

table = spss.BasePivotTable("Table Title","OMS table subtype")
table.Append(spss.Dimension.Place.row,"Minority Classification")
table.Append(spss.Dimension.Place.column,"coldim",hideName=True)
 
cur=spss.Cursor()
salary = 0; salarym = 0; n = 0; m = 0
minorityIndex = 9
salaryIndex = 5

row = cur.fetchone()
spss.SplitChange("spss.com.demo")
while True:  
   if cur.IsEndSplit():
      if n>0:
         salary=salary/n
      if m>0:
         salarym=salarym/m
      # Populate the pivot table with values for the previous split group
      table[(CellText.String("No"),CellText.String("Average Salary"))] = \ 
             CellText.Number(salary,FormatSpec.Count)
      table[(CellText.String("Yes"),CellText.String("Average Salary"))] = \ 
             CellText.Number(salarym,FormatSpec.Count)
      salary=0; salarym=0; n = 0; m = 0
      # Try to fetch the first case of the next split group
      row=cur.fetchone()
      if not None==row:
         spss.SplitChange("spss.com.demo")
      else:
         #There are no more cases, so quit
         break
   if row[minorityIndex]==1:
      salarym += row[salaryIndex]
      m += 1
   elif row[minorityIndex]==0:
      salary += row[salaryIndex]
      n += 1
   row=cur.fetchone()

cur.close()
spss.EndProcedure()
  • spss.Submit 函數用來提交指令語法,以建立對性別變數的分割。 SPLIT FILE 指令上的 LAYERED 次指令指出不同分割群組的結果將顯示在同一表格中。 請注意,在呼叫 spss.StartProcedure之前,會先執行指令語法。
  • 從作用中資料集提取第一個觀察值之後,會呼叫 spss.SplitChange 函數。 這是必要的,以便正確處理第一個分割群組的樞紐表輸出。
  • 使用 Cursor 類別中的 IsEndSplit 方法偵測分割變更。 偵測到分割變更之後,樞紐表會移入前一個分割的結果。
  • fetchone 方法傳回的值在分割界限處為 None 。 偵測到分割之後,您將需要再次呼叫 fetchone ,以擷取新分割群組的第一個觀察值,後面接著 spss.SplitChange附註: 當達到資料集結尾時, IsEndSplit 會傳回 True 。 雖然分割界限和資料集結尾都會導致 IsEndSplit中的回覆值 True ,但資料集結尾由後續呼叫 fetchone中的回覆值 None 識別,如本範例所示。