与do循环语句和多集语句中的一个set语句有什么区别?

时间:2019-02-15 07:57:13

标签: sas set

我正在学习使用double set语句的技巧,并且在以下代码中遇到了麻烦:

True
False

Test1有9个观测值(所有偶数行),而Test2有19个观测值,有人可以帮我解释一下吗?

1 个答案:

答案 0 :(得分:1)

SAS output语句将观察结果写到您的输出数据集。当不使用显式output语句时(如您的数据步骤中一样),数据步骤末尾的隐式output将当前观察结果输出到输出数据集。

在您的第一个数据步骤中,do循环使set语句执行两次,第一次读取obs#1,第二次读取obs#2。循环结束,下一条语句为run,因此隐式output输出当前观察值#2。数据步骤的下一次迭代使do循环先读取Obs#3,然后读取#4,因此输出最后一个Obs(#4),依此类推,直到数据集结束。

第二个数据步骤执行在obs#1中读取的第一个set语句,然后执行第二个set语句,并从该输入数据集中读取obs#1,覆盖当前的观察。隐式output导致此obs被写出。重复执行数据步骤,使obs#2发生同样的情况,依此类推,直到读取并输出所有19个obs。

插入一些诊断信息可以帮助您了解正在发生的事情,例如,提交以下内容并检查日志:

data test1;
   do i = 1 to 2;
      set sashelp.class;
      putlog 'In loop: ' i= name=;
   end;
      putlog 'About to output: ' name=;
run;