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 識別,如本範例所示。