gpt4 book ai didi

带有 SET 语句的 SAS DO 循环

转载 作者:行者123 更新时间:2023-12-04 15:46:17 24 4
gpt4 key购买 nike

给定两个简单的数据集A和B如下

DATA A; INPUT X @@;
CARDS;
1 2 3 4
RUN;

DATA B; INPUT Y @@;
CARDS;
1 2
RUN;

我正在尝试创建两个名为 C 和 D 的数据集,一个使用重复的 SET 和 OUTPUT 语句,另一个使用 DO 循环。

DATA C;      
SET B;
K=1; DO; SET A; OUTPUT; END;
K=K+1; DO; SET A; OUTPUT; END;
K=K+1;
RUN;

DATA D;
SET B;
DO K = 1 TO 2;
SET A; OUTPUT;
END;
RUN;

我认为 C 和 D 应该相同,因为 DO 循环应该重复 C 的 DATA 步中所示的那些语句,但事实证明它们是不同的。

Dataset C:
Obs Y K X
1 1 1 1
2 1 2 1
3 2 1 2
4 2 2 2

Dataset D:
Obs Y K X
1 1 1 1
2 1 2 2
3 2 1 3
4 2 2 4

有人可以解释一下吗?

最佳答案

第一个数据步骤中的两个SET A 语句是独立的。因此,在数据步骤的每次迭代中,它们都将读取相同的观察结果。所以就好像你运行了这一步。

data c;
set b;
set a;
do k=1 to 2; output; end;
run;

第二个数据步骤中的 SET A 语句将在数据步骤的第一次迭代中执行两次。因此,对于数据步骤的每次迭代,它将从 A 中读取两个观察结果。

如果您真的想进行交叉连接,则需要使用 point= 选项,以便您可以重新读取其中一个数据集。

data want ;
set b ;
do p=1 to nobs ;
set a point=p nobs=nobs ;
output;
end;
run;

关于带有 SET 语句的 SAS DO 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49790897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com