Sas do循环中的一个set语句与多个set语句有什么区别?
我正在学习使用double set语句的技巧,在以下代码中遇到了问题:Sas do循环中的一个set语句与多个set语句有什么区别?,sas,set,Sas,Set,我正在学习使用double set语句的技巧,在以下代码中遇到了问题: data test1; do i = 1 to 2; set sashelp.class; end; run; data test2; set sashelp.class; set sashelp.class; run; Test1有9个观察值(所有偶数行),Test2有19个观察值,有人能给我解释一下吗?SASoutput语句将观察值写入输出数据集。当没有使用显式output语句时(如在数据
data test1;
do i = 1 to 2;
set sashelp.class;
end;
run;
data test2;
set sashelp.class;
set sashelp.class;
run;
Test1有9个观察值(所有偶数行),Test2有19个观察值,有人能给我解释一下吗?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,覆盖当前观测值。隐式输出
导致写入此obs。重复数据步骤,导致obs#2发生同样的情况,依此类推,直到所有19个OB都被读取和输出
插入一些诊断有助于了解发生的情况,例如提交以下内容并检查日志:
data test1;
do i = 1 to 2;
set sashelp.class;
putlog 'In loop: ' i= name=;
end;
putlog 'About to output: ' name=;
run;
我将“doi=1到2;”修改为“doi=1到3;”,发现Test1只有6个观察值(sashelp.class的每三行中就有一个)。我想我知道Test1是如何生成的,但仍然不知道Test1和Test2之间的区别。答案可能是第一个数据步骤有一行指示符,第二个有两行指示符?