概述 (LOOP-END LOOP 命令)
LOOP-END LOOP 结构执行由循环中的命令指定的重复变换,直到它们达到指定的分界值为止。 可以通过 LOOP 命令上的索引子句, END LOOP 命令上的 IF 子句或循环结构中的 BREAK 命令来指定分界值 (请参阅 BREAK)。 此外,可以在 SET的 MXLOOPS 子命令中指定循环中的最大迭代次数。 缺省值 MXLOOPS 为 40。
LOOP 命令上的 IF 子句可用于对个案子集执行重复变换。 此效果类似于将 LOOP-END LOOP 结构嵌套在 DO IF-END IF 结构中,但在 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条件的循环将终止。