我在 SAS 中尝试了这段代码,但输出与我预期的不同。
data temp;
input sumy;
datalines;
36
;
run;
data aaa;
if _n_ = 1 then
set temp;
run;
proc print data = aaa;
run;
请问为什么有两次观察,sas 有“set”两次?在迭代过程中,“set”和 PDV 在这里是如何工作的?先感谢您。
最佳答案
因为您在数据步骤结束时执行了两次隐含的 OUTPUT。第一次,当 _N_=1 时,您从输入数据集中读取一个观察值。第二次您没有读取新的观察结果,因为 _N_ 现在是 2,并且保留了上一次观察的值。在第二次观察后 SAS 停止,因为它检测到您的数据步骤处于循环中。
如果您只想要一个观察结果,那么要么在 RUN 语句之前添加 STOP 语句,要么重新编码数据步骤以在输入数据集上使用 OBS=1 数据集选项而不是 IF 语句。
请注意,如果输入数据集为空,那么您将输出零个观察值,因为当 SET 语句读取超过输入数据集的末尾时,数据步骤将停止。
关于sas - 设置在第一行,为什么我有两个输出行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31375150/