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 语句。
作为我的 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 语句。