sas - 设置在第一行,为什么我有两个输出行?

标签 sas

我在 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/

相关文章:

sas - 使用数据集变量的文件名语句的正确语法

sas - 使用SAS计算缺失值的平均值

integer - SAS 将 ascii 转换回整数值

sql - 使用SAS sql创建宏变量

format - SAS-从带有科学计数法的数字的csv文件导入时如何保留实际数字

SAS 输出窗口与结果查看器

sas - 如何限制 SAS 中的月份数

SAS——滞后函数的采用

sas - 根据包含代码簿的单独数据集中的变量更改一个数据集中的 SAS 变量标签/属性 - PROC SQL?处理数据集?

sas - 如何在 SAS 中将条件作为宏参数传递