程式狀態

若要執行程式階段作業,您需要定義作用中資料集、轉換資料,然後分析它。 此順序非常符合程式在處理您的指令時必須遵循的順序。 具體而言,程式會根據其通過的程式狀態來檢查指令順序。 程式狀態 是程式在遇到指令之前及之後的性質。 有四個程式狀態。 每一個階段作業都在 起始狀態中啟動,後面接著 輸入程式狀態轉換狀態程序狀態。 這四個程式狀態可讓程式設定環境、讀取資料、修改資料,以及執行程序。 此圖顯示程式如何在這些狀態中移動。 程式會從已發現的指令判斷現行狀態,然後識別在該狀態中容許哪些指令。

圖 1. 程式狀態
程式狀態

階段作業必須通過起始、輸入程式及程序狀態,才能成為完整階段作業。 由於所有階段作業都以起始狀態啟動,因此您需要主要關注定義作用中資料集及分析資料所需的指令。 下列指令定義非常最小的階段作業:

GET FILE=DATAIN.
FREQUENCIES VARIABLES=ALL.

GET 指令會定義作用中資料集, FREQUENCIES 指令會讀取資料檔並分析它。 因此,程式會經歷所需的三種狀態: 起始、輸入及程序。

一般而言,階段作業也會經歷轉換狀態,但可以跳過它,如上圖中的範例及圖表所示。 請考量下列範例:

TITLE 'PLOT FOR COLLEGE SURVEY'.

DATA LIST FILE=TESTDATA
 /AGE 1-3 ITEM1 TO ITEM3 5-10.

VARIABLE LABELS ITEM1 'Opinion on level of defense spending'
  ITEM2 'Opinion on level of welfare spending'
  ITEM3 'Opinion on level of health spending'.
VALUE LABELS ITEM1 TO ITEM3 -1 'Disagree' 0 'No opinion' 1 'Agree'.
MISSING VALUES AGE(-99,-98) ITEM1 TO ITEM3 (9).
RECODE ITEM1 TO ITEM3 (0=1) (1=0) (2=-1) (9=9) (ELSE=SYSMIS).
RECODE AGE (MISSING=9) (18 THRU HI=1) (LO THRU 18=0) INTO VOTER.
PRINT /$CASENUM 1-2 AGE 4-6 VOTER 8-10.
VALUE LABELS VOTER 0 'Under 18' 1 '18 or over'.
MISSING VALUES VOTER (9).
PRINT FORMATS VOTER (F1.0).

FREQUENCIES VARIABLES=VOTER, ITEM1 TO ITEM3.

程式會以起始狀態啟動,並在其中處理 TITLE 指令。 然後,當遇到 DATA LIST 指令時,它會進入輸入狀態。 處理 DATA LIST 指令之後,程式就可以進入轉換或程序狀態。

在此範例中,在處理 VARIABLE LABELSPRINT FORMATS的每一個指令之後,程式會保持在轉換狀態。 然後,程式會移至程序狀態,以處理 FREQUENCIES 指令。 如上圖所示,如果程式遇到第二個程序,則可以重複程序狀態。 如果程式在第一個程序之後遇到其他轉換指令,則可以回到轉換狀態。 最後,在某些階段作業中,當程式遇到 FILE TYPEMATCH FILES之類的指令時,它可以回到輸入程式狀態。