BY 关键字 (LOOP-END LOOP 命令)

缺省情况下,对于每个迭代,程序都会将索引变量增大 1。 关键字 BY 将覆盖此增量。

  • 增量值 可以是数字表达式,因此可以是非整数或负数。 零会导致警告并导致零行程循环。
  • 如果初始值大于终端值且增量为正,那么永远不会输入循环。 #I=1 TO 0 BY 2 会导致零行程循环。
  • 如果初始值小于终端值且增量为负,那么将从不输入循环。 #I=1 TO 2 BY –1 还会导致零行程循环。
  • 顺序不重要: 2 BY 2 TO 10 等同于 2 TO 10 BY 2

示例

LOOP #I=2 TO 10 BY 2. /*Loop five times by 2'S
COMPUTE X=X+1.
END LOOP.
  • 临时变量 #I 从 2 开始,并针对五个迭代中的每个迭代增加 2 ,直到最后一个迭代等于 10 为止。

示例

LOOP #I=1 TO Y BY Z. /*Loop to Y incrementing by Z
COMPUTE X=X+1.
END LOOP.
  • Y 等于 2 且 Z 等于 2 的观测值执行一次循环,但对 Y 等于 3 且 Z 等于 2 的观测值执行两次循环。

示例

* Repeating data using LOOP.
 
INPUT PROGRAM.
DATA LIST      NOTABLE/ ORDER 1-4(N) #BKINFO 6-71(A).
LEAVE ORDER.
LOOP           #I = 1 TO 66 BY 6 IF SUBSTR(#BKINFO,#I,6) <> ' '.
+  REREAD         COLUMN = #I+5.
+  DATA LIST      NOTABLE/ ISBN 1-3(N) QUANTITY 4-5.
+  END CASE.
END LOOP.
END INPUT PROGRAM.
SORT CASES     BY ISBN ORDER.
BEGIN DATA
1045 182 2 155 1 134 1 153 5
1046 155 3 153 5 163 1
1047 161 5 182 2 163 4 186 6
1048 186 2
1049 155 2 163 2 153 2 074 1 161 1
END DATA.
 
DO IF          $CASENUM = 1.
+  PRINT EJECT    /'Order' 1  'ISBN' 7  'Quantity' 13.
END IF.
PRINT          /ORDER 2-5(N) ISBN 8-10(N) QUANTITY 13-17.
EXECUTE.
  • 此示例使用 LOOP 来模拟 REPEATING DATA 命令。
  • DATA LIST 将临时变量 #BKINFO 指定为字符串变量 (格式 A) ,以允许数据中存在空白。
  • 如果 SUBSTR 函数返回除空白值或空值以外的任何值,那么将执行 LOOPSUBSTR 返回 #BKINFO的 6 个字符的子串,以索引变量 #I的值所指定的位置中的字符开头。 如建立索引子句中所指定, #I 以值 1 开头,并针对 LOOP的每次迭代增大 6 ,最大 #I 值为 61 (1 + 10 × 6 = 61)。 下一次迭代将超过最大 #I 值 (1 + 11 × 6 = 67)。