data m1;
set t1;
do i = 1 to 29;
set t2 point=i;
end;
run;
data test;
do i=1 to 29;
set t2 point=i;
end;
run;
我可以理解为什么它是数据测试的连续循环,但我不知道如何解释为什么数据m1不是无限循环。 (t1有29条记录)
有没有人有任何想法?谢谢你的帮助。
答案 0 :(得分:2)
M1步骤中的第一个SET语句定义DATA步骤何时停止。它看到T1数据集的结束并停止。
答案 1 :(得分:1)
每当引发文件结束条件时(在不再存在记录时尝试从文件或数据集中读取),数据步骤都会“停止”。
在第一个示例中,数据步骤从名为t1
的表(数据集)中读取记录,然后从表t2
中读取29条记录。输出表m1
将具有与t1
中相同的记录数。一旦步骤尝试从t1
读取新记录,该步骤将立即停止。
你的第二个例子永远运行,因为它永远不会遇到文件结束条件。它将继续输出记录,直到您用完磁盘空间或中断该步骤。
答案 2 :(得分:0)
其他人说的是对的。 SAS数据步骤是一个隐式循环,它将在满足特定条件时结束。我认为第二个数据步骤是无限的,因为在do循环之外没有set dataset
语句。因此,数据步骤循环不知道有关文件结尾(EOF)的任何信息。 point
循环内的do
未观察到EOF,因此无法停止。
在data test
中,结束无限循环的条件触发器是set
循环之外的do
语句,因为数据集具有有限数量的条目。这意味着可以访问EOF。一旦数据集循环被告知已经达到EOF并且不能再读取,它将结束循环。
此外,还可以使用其他触发器,例如stop;
语句或提示用户按某些键以结束循环。