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函数返回除空白值或空值以外的任何值,那么将执行LOOP。SUBSTR返回 #BKINFO的 6 个字符的子串,以索引变量 #I的值所指定的位置中的字符开头。 如建立索引子句中所指定, #I 以值 1 开头,并针对LOOP的每次迭代增大 6 ,最大 #I 值为 61 (1 + 10 × 6 = 61)。 下一次迭代将超过最大 #I 值 (1 + 11 × 6 = 67)。