概觀 (LOOP-END LOOP 指令)
LOOP-END LOOP 結構會執行迴圈中指令指定的重複轉換,直到達到指定的截斷為止。 截斷值可以由 LOOP 指令上的索引子句、 END LOOP 指令上的 IF 子句或迴圈結構內的 BREAK 指令指定 (請參閱 BREAK)。 此外,在 SET上的 MXLOOPS 次指令上,可以指定迴圈中的反覆運算數目上限。 預設 MXLOOPS 為 40。
LOOP 指令上的 IF 子句可用來對觀察值子集執行重複轉換。 效果類似於在 DO IF-END IF 結構內巢狀 LOOP-END LOOP 結構,但在 LOOP 上使用 IF 更簡單且更有效率。 不過,如果您要對不同的觀察值子集執行不同的轉換,則必須使用 DO IF-END IF 結構。 您也可以使用 IF on LOOP 來指定截斷,特別是在第一次反覆運算之前可能達到截斷時。
LOOP 和 END LOOP 通常用於輸入程式內或與 VECTOR 指令一起使用。 由於迴圈結構會在單一觀察值或包含多個觀察值相關資訊的單一輸入記錄上重複轉換,因此它可讓您讀取複式資料檔或產生作用中資料集的資料。 如需相關資訊,請參閱 INPUT PROGRAM-END INPUT PROGRAM 及 VECTOR。
迴圈結構會在變數之間的單一觀察值上重複轉換。 它與 DO REPEAT-END REPEAT 結構不同,後者會在一組指定的變數上抄寫轉換。 當兩者都可用來完成作業 (例如選擇性地在某些變數上轉換某些觀察值的資料) 時, LOOP 和 END LOOP 通常會更有效率且更靈活,但 DO REPEAT 容許選取非相鄰變數並使用不同間隔的取代值。
選項
遺漏值。 您可以防止迴圈結構中使用的任何變數具有遺漏值的觀察值進入迴圈。 如需相關資訊,請參閱主題 遺漏值 (LOOP-END LOOP 指令) 。
正在建立資料。 輸入程式內的迴圈結構可用來產生資料。 如需相關資訊,請參閱主題 建立資料 (LOOP-END LOOP 指令) 。
定義複式檔案結構。 輸入程式內的迴圈結構可用來定義標準檔案定義機能無法處理的複式檔案。
基本規格
基本規格是 LOOP 後接至少一個轉換指令。 結構必須以 END LOOP 指令結尾。 會執行迴圈內的指令,直到達到截斷為止。
指令語法的規則
- 如果在作用中資料集存在之前指定
LOOP及END LOOP,則必須在輸入程式內指定它們。 - 如果在
LOOP上同時使用檢索及IF子句,則檢索子句必須是第一個。 - 迴圈結構可以巢狀在其他迴圈結構內或
DO IF結構內,反之亦然。
作業
LOOP指令定義迴圈結構的開頭,而END LOOP指令定義其結尾。 除非已達到截斷值,否則LOOP指令會將控制權傳回給LOOP。 達到截斷值時,會將控制權傳遞給緊接在END LOOP之後的指令。- 在不讀取資料或執行擱置指令 (例如
VALUE LABELS、MISSING VALUES、VARIABLE LABEL) 的情況下立即生效的指令、不需要作用中資料集的指令 (例如DISPLAY、HOST、INSERT、OMS、SET) ,以及每次在迴圈結構中發現它們時立即無條件地處理的GET指令。 這些指令會忽略指定的條件。 - 需要資料傳遞的指令 (例如統計或圖表作業程序) 無法併入迴圈結構中,且會導致
LOOP指令失敗。 - 檢索子句 (例如
LOOP #i=1 to 1000) 將置換SET MXLOOPS限制,但如果在滿足條件之前達到MXLOOPS限制,則具有IF條件的迴圈將終止。