gpt4 book ai didi

sas - 在 SAS 中生成相互依赖的数据

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

我正在尝试计算 SAS 中的一列,该列依赖于自身。例如,我有以下初始值列表

    ID Var_X Var_Y Var_Z
1 2 3 .
2 . 2 .
3 . . .
4 . . .
5 . . .
6 . . .
7 . . .

我需要填补空白。公式如下:
    Var_Z = 0.1 + 4*Var_x + 5*Var_Y
Var_X = lag1(Var_Z)
Var_Y = lag2(Var_Z)

正如我们看到的 Var_X、Var_Y 和 Var_Z 的值是相互依赖的。所以计算需要遵循特定的顺序。
First we compute when ID = 1, Var_Z = 0.1 + 4*2 + 5*3 = 23.1
Next, when ID = 2, Var_X = lag1(Var_Z) = 23.1

Var_Y 不需要在 ID = 2 处计算,因为我们这里已经有了初始值。所以,我们有
    ID Var_X Var_Y Var_Z
1 2 3 23.1
2 23.1 2 102.5 (= 0.1 + 4*23.1 +5*2)
3 . . .
4 . . .
5 . . .
6 . . .
7 . . .

我们不断重复这个过程,直到计算出所有的值(value)。

有没有办法,SAS 可以处理这个?我尝试了 DO 循环,但我想我没有把它编码得很好。它只是在 ID = 2 后停止。

我是 SAS 的新手,所以不熟悉 SAS 是否可以轻松处理此问题。将等待您的建议。

最佳答案

如果您只是在单个数据步骤中执行此操作,则不需要使用 LAG 或 RETAIN。 DO 循环本身可以很好地处理事情。 RETAIN 只有在我们做一些涉及预先存在的数据集的事情时才需要,但真的没有理由使用一个。

我在这里使用了一个快捷方式——当你用 VAR_Z 来描述 VAR_Y 时,你的意思是在一次迭代之后,VAR_Z 移动到 VAR_X,而 VAR_X 移动到 VAR_Y,所以我这样做(以正确的顺序不混淆) .

data test_data;
if _n_ = 1 then do;
var_x=2;
var_y=3;
end;
do _iter = 1 to 7;
var_z = 0.1+4*var_x+5*var_y;
output;
var_y=var_x;
var_x=var_z;
end;
run;
proc print data=test_data;
run;

关于sas - 在 SAS 中生成相互依赖的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12325963/

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