我正在学习使用double set语句的技巧,并且在以下代码中遇到了麻烦:
True
False
Test1有9个观测值(所有偶数行),而Test2有19个观测值,有人可以帮我解释一下吗?
答案 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;