Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sas do循环中的一个set语句与多个set语句有什么区别?_Sas_Set - Fatal编程技术网

Sas do循环中的一个set语句与多个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语句时(如在数据

我正在学习使用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个观察值,有人能给我解释一下吗?

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之间的区别。答案可能是第一个数据步骤有一行指示符,第二个有两行指示符?