SAS:数据步骤表现异常

SAS: Data step is behaving strangely

作为我的 BASE SAS 认证准备的一部分,我正在进行练习作业,以查看数据步骤何时结束。 下面是代码:

data first; 
input x;
datalines; 
1
2
9
;
run;

data second;
input x;
datalines;
3
4
5
6
;
run;
data third;
set first;
output;
set second;
output;
run;

输出为: 1个 3个 2个 4个 5个 9

但是当我在第一个数据集中只有 2 个值 1 和 2 时,输出是 1 2 3 4 而不是 1 3 2 4 。为什么会这样?

我认为 set 语句同时从两个数据集中读取 obs。

所以在 PDV 中第一次迭代 n=1 然后 x = 。和 x = 1(从一开始) n=2 然后 x = 3 和 x =2(从第二个和第一个开始)等等...... 因为我会说两个明确的输出语句。

使用put语句会更清楚

     data third;
     put _all_;
     set first;
     output;
     put _all_;
     set second;
     output;
     run;

当您读取第二个数据集然后读取第一个数据集时,也会发生同样的情况。

datastep 过程作为隐式 do 循环。所以当你考虑你的数据步骤时...

data third;
  set first;
  output;
  set second;
  output;
run;

...你的两个 set 语句都充当滴灌,从数据步循环中每次交互指定的相应数据集集中提供一个观察结果。

如果您希望 third 中的观察结果按以下顺序排列:

1, 2, 9, 3, 4, 5, 6

然后您需要更改数据步骤以仅提供一个 set 语句以一个接一个地在两个数据步骤中滴灌:

data third;
  set first second ;
  output;
run;

因为那是你告诉它要做的?

SAS 执行数据步骤,直到它读取输入文件的末尾(或者它检测到无限循环)。在您的情况下,它会在尝试从第一个 SET 语句中读取第四个观察结果时停止。因此它永远不会在第四次迭代中到达第二个 SET 语句。