SAS Do循环Set语句

时间:2017-07-28 15:03:12

标签: sas

我有一个名为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并且删除输出语句,我会得到一个空数据集。我无法理解这一点。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:2)

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

SAS通常在数据步骤迭代结束时写入观察结果。例外情况是您编写了明确的OUTPUT语句。因此,如果没有OUTPUT步骤,SAS只会在到达数据步骤结束时写出观察结果。因此,当您对OUTPUT进行了更改时,您将使步骤与:

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

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