繼續次指令 (REPEATING DATA 指令)

CONTINUED 表示重複群組包含在每一個輸入觀察值的多筆記錄中。

  • 每一個重複群組都必須完整記錄在單一記錄上: 重複群組不能跨記錄分割。
  • 重複群組必須在所有連續記錄上的相同直欄中開始。
  • 如果指定 CONTINUED 而沒有開始及結束直欄,則程式會假設重複群組在連續記錄的直欄 1 中開始,並透過掃描至記錄結尾或 OCCURS指定的值來搜尋重複群組。 如需相關資訊,請參閱主題 作業 (REPEATING DATA 指令)
  • 如果連續記錄上的重複群組不在直欄 1 中開始,則 CONTINUED 必須指定重複群組開始所在的直欄。
  • 如果重複群組的邏輯記錄長度大於每一個輸入觀察值的第一筆記錄所包含的重複群組長度,則 STARTS 次指令必須指出記錄的結束欄。 STARTS 上的結束直欄僅適用於每一個輸入觀察值的第一筆記錄。
  • 如果邏輯記錄長度上的重複群組數超過每一個輸入觀察值的連續記錄所包含的重複群組數,則 CONTINUED 次指令必須指出結束欄。 CONTINUED 上的結束直欄會套用至所有接續記錄。

基本範例

* This example assumes the logical record length is 80. 
 
INPUT PROGRAM.
DATA LIST / ORDERID 1-5 NITEMS 7-8.
REPEATING DATA STARTS=10 /OCCURS=NITEMS /CONTINUED=7
 /DATA=ITEM 1-9 (A) QUANTITY 11-13 PRICE (DOLLAR7.2,1X).
END INPUT PROGRAM.
 
BEGIN DATA
10020 07 01-923-89 001  25.99 02-899-56 100 101.99 03-574-54 064  61.29
10020 04-780-32 025  13.95 05-756-90 005  56.75 06-323-47 003  23.74
10020 07-350-95 014  11.46
20030 04 01-781-43 010  10.97 02-236-54 075 105.95 03-655-83 054  22.99
20030 04-569-38 015  75.00
END DATA.
LIST.
  • 從郵件訂單檔案中擷取資料。 每一個輸入觀察值代表一個完整順序。 資料顯示在總共五筆記錄上記錄的兩個完整訂單。
  • 訂單號碼記錄在每筆記錄的直欄 1 到 5 中。 前三筆記錄包含訂單 10020 的資訊; 後兩筆記錄包含訂單 20030 的資訊。 每一筆訂單的第一筆記錄上的第二個數字欄位指出已訂購的項目總數。 重複群組從第一筆記錄上的第 10 欄開始,接續記錄上的第 7 欄開始。 每一個重複資料群組代表一個訂購的項目,並包含三個變數-項目庫存號碼、訂購數量及價格。
  • DATA LIST 在每個輸入觀察值的第一筆記錄上定義變數 ORDERIDNITEMS
  • STARTS on REPEATING DATA 表示每一個輸入觀察值第一筆記錄上的重複群組從直欄 10 開始。
  • OCCURS 表示每一個輸入觀察值的重複群組總數是 NITEMS的值。
  • 必須使用 CONTINUED ,因為重複群組會在每一個輸入觀察值的多個記錄上繼續。 CONTINUED 指定開始直欄,因為重複群組在連續記錄上的直欄 7 而非直欄 1 中開始。
  • DATA 定義每一個重複資料群組的變數 ITEMQUANTITYPRICEITEM 位於位置 1-9 , QUANTITY 位於位置 11-13 , PRICE 位於位置 14-20 ,後面接著一個空白直欄。 因此,重複群組的長度為 21 個直欄。 LIST 輸出如下所示。
ORDERID NITEMS ITEM      QUANTITY      PRICE
 
 10020     7   01-923-89      1       $25.99
 10020     7   02-899-56    100      $101.99
 10020     7   03-574-54     64       $61.29
 10020     7   04-780-32     25       $13.95
 10020     7   05-756-90      5       $56.75
 10020     7   06-323-47      3       $23.74
 10020     7   07-350-95     14       $11.46
 20030     4   01-781-43     10       $10.97
 20030     4   02-236-54     75      $105.95
 20030     4   03-655-83     54       $22.99
 20030     4   04-569-38     15       $75.00
 
NUMBER OF CASES READ =      11    NUMBER OF CASES LISTED =      11

在 STARTS 次指令上指定結束直欄

* This example assumes the logical record length is 80.
 
INPUT PROGRAM.
DATA LIST / ORDERID 1-5 NITEMS 7-8.
REPEATING DATA STARTS=10-55 /OCCURS=NITEMS /CONTINUED=7
 /DATA=ITEM 1-9 (A) QUANTITY 11-13 PRICE (DOLLAR7.2,1X).
END INPUT PROGRAM.
 
BEGIN DATA
10020 07 01-923-89 001  25.99 02-899-56 100 101.99
10020 03-574-54 064  61.29 04-780-32 025  13.95 05-756-90 005  56.75
10020 06-323-47 003  23.74 07-350-95 014  11.46
20030 04 01-781-43 010  10.97 02-236-54 075 105.95
20030 03-655-83 054  22.99 04-569-38 015  75.00
END DATA.
LIST.
  • 資料與前一個範例相同; 不過,會以不同方式輸入記錄。 每一個輸入觀察值的第一筆記錄只包含兩個重複群組。
  • DATA LIST 在每個輸入觀察值的第一筆記錄上的第 1-8 欄中定義變數 ORDERIDNITEMS 。 直欄 9 是空白。 DATA 在每一個重複群組的位置 1-20 中定義變數 ITEMQUANTITYPRICE ,後面接著一個空白。 因此,每一個重複群組的寬度為 21 個直欄。 因此,每一個輸入觀察值的第一筆記錄長度為 51 個直欄: 兩個重複群組各 21 個直欄,加上 DATA LIST上定義的 8 個直欄,加上直欄 9 (空白)。 作業系統的邏輯記錄長度為 80 ,容許在每一個輸入觀察值的第一筆記錄上有多個重複群組的空間。 因此, STARTS 必須指定未提供足夠直欄給另一個重複群組的結束直欄; 否則,程式會為 DATA上指定的變數建立具有遺漏值的輸出觀察值。
  • STARTS 指定程式只掃描每一個輸入觀察值之第一筆記錄的第 10-55 欄,以尋找重複資料群組。 它將從直欄 7 開始掃描連續記錄,直到達到 OCCURS 次指令上指定的值為止。

在連續次指令上指定結束欄

* This example assumes the logical record length is 80.
 
INPUT PROGRAM.
DATA LIST / ORDERID 1-5 NITEMS 7-8.
REPEATING DATA STARTS=10-55 /OCCURS=NITEMS /CONTINUED=7-55
 /DATA=ITEM 1-9 (A) QUANTITY 11-13 PRICE (DOLLAR7.2,1X).
END INPUT PROGRAM.
 
BEGIN DATA
10020 07 01-923-89 001  25.99 02-899-56 100 101.99
10020 03-574-54 064  61.29 04-780-32 025  13.95
10020 05-756-90 005  56.75 06-323-47 003  23.74
10020 07-350-95 014  11.46
20030 04 01-781-43 010  10.97 89-236-54 075 105.95
20030 03-655-83 054  22.99 04-569-38 015  75.00
END DATA.
LIST.
  • 資料與前兩個範例相同,但會以不同方式輸入記錄。 每一個輸入觀察值的第一筆記錄和連續記錄只會分別儲存兩個重複群組。
  • 作業系統的邏輯記錄長度為 80 ,這容許所有記錄有更多重複群組的空間。
  • STARTS 指定程式只掃描每一個輸入觀察值之第一筆記錄的第 10-55 欄,以尋找重複資料群組。
  • CONTINUED 指定程式只掃描所有連續記錄的直欄 7-55。