SAS 执行循环 Set 语句



我有一个名为 test 的数据集,一个名为 'id' 的数值变量有 3 个观察结果:

1
2
3

我正在使用do循环创建另一个,如下所示:

DATA abc;
DO i = 1 to 3;
SET test;
m+1;
OUTPUT;
END;
RUN;

这将返回 3 个观测值。

如果我将 do 循环从 1 更改为 4 并删除输出语句,我会得到一个空数据集。我无法解决这个问题。有人可以解释一下吗?

大多数 SAS 数据步骤实际上在执行 SET 或 INPUT 语句并发现没有更多可用输入时结束。这就是正在发生的事情。

SAS 通常在数据步骤迭代结束时写入观测值。例外情况是当您编码了显式 OUTPUT 语句时。 因此,如果没有输出步骤,SAS 只会在数据步骤结束时写出观察结果。 因此,当您重新调整输出时,您所做的步骤与以下内容相同:

DATA abc;
DO i = 1 to 3;
SET test;
m+1;
END;
OUTPUT;
RUN;

但是,如果您的 DO 循环迭代的次数多于 SET 语句要读取的观察值,那么它将永远不会到达最后写入输出,因为它将读取超过输入数据集的末尾并停止。

最新更新