加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 04:53:21 所属栏目:百科 来源:网络整理
导读:我正在尝试在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
我正在尝试在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     .     .     .

我们不断重复此过程,直到计算出所有值.

有没有办法,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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读