正在创建数据 (LOOP-END LOOP 命令)
输入程序中的循环结构和 END CASE 命令可用于创建没有任何数据输入的数据。 必须在循环外部 (但在输入程序中) 使用 END FILE 命令来终止处理。
示例
INPUT PROGRAM.
LOOP #I=1 TO 20.
COMPUTE AMOUNT=RND(UNIFORM(5000))/100.
END CASE.
END LOOP.
END FILE.
END INPUT PROGRAM.
PRINT FORMATS AMOUNT (DOLLAR6.2).
PRINT /AMOUNT.
EXECUTE.
- 此示例使用单个变量 AMOUNT创建 20 个个案。 AMOUNT 是一个均匀分布的数字,介于 0 和 5,000 之间,四舍五入为整数,除以 100 ,以提供以美元和美分为单位的变量。
- 完成循环结构后,需要
END FILE命令来终止处理。
临时索引变量与永久索引变量
对于每个个案,永久变量将重新初始化为系统缺失值,但临时变量将初始化为 0 ,并且不会针对每个个案重新初始化; 而是保留其先前的值。 对于不跨越个案的循环,这不是一个重要因素,但在输入程序中,嵌套循环可以在个案之间持久存在。 在此类情况下,不会影响索引计数器,因为在执行循环之后会对其进行高速缓存和复原,但是循环中使用索引变量值的命令的结果对于临时和永久索引变量将有所不同。
*using scratch index variables.
INPUT PROGRAM.
LOOP #i=1 to 3.
- LOOP #j=#i to 4.
- COMPUTE var1=#i.
- COMPUTE var2=#j.
- END CASE.
- END LOOP.
END LOOP.
END FILE.
END INPUT PROGRAM.
LIST.
*using non-scratch index variables.
INPUT PROGRAM.
LOOP i=1 to 3.
- LOOP j=i to 4.
- COMPUTE var1=i.
- COMPUTE var2=j.
- END CASE.
- END LOOP.
END LOOP.
END FILE.
END INPUT PROGRAM.
LIST.
var1 var2
1.00 1.00
1.00 2.00
1.00 3.00
1.00 4.00
2.00 2.00
2.00 3.00
2.00 4.00
3.00 3.00
3.00 4.00
i j var1 var2
1.00 1.00 1.00 1.00
. 2.00 . 2.00
. 3.00 . 3.00
. 4.00 . 4.00
2.00 2.00 2.00 2.00
. 3.00 . 3.00
. 4.00 . 4.00
3.00 3.00 3.00 3.00
. 4.00 . 4.00
- 除了使用永久变量作为索引变量导致在活动数据集中创建 (或替换) 这些变量之外,请注意在使用永久变量作为索引变量的输入程序的结果中缺少 var1 (和 i) 的许多值,而使用临时变量的结果中没有任何值。
- 在这两种情况下,内循环都以
END CASE命令结束,这将导致永久变量 i 重新初始化为系统缺失,以用于内循环的后续迭代,但临时变量 #i 保留其先前的值。 - 当控件再次传递到外部循环时,高速缓存的索引值将用于设置和递增 i; 因此,对于内部循环的第一次迭代,它具有非缺失值,但一旦迂到
END CASE,它将再次缺失,直到控件再次传递到外部循环为止。
请参阅主题 临时变量 以获取更多信息。