我有超过3,000个观测值的时间序列数据集。我正在尝试创建一个新变量,该变量依赖于该变量的先前值,并且我无法让SAS计算每个观察值以确保在进入下一个观察之前计算先前的值。
我已将第一个观察设置为1.然后,对于剩余的观察,我希望SAS计算:
New_var = lag(new_var)*(1 + Var2)
有什么想法吗?我相信这是一个相对简单的答案,但我自己无法解读。
答案 0 :(得分:3)
您可以尝试使用retain语句而不是滞后。
retain new_var;
new_var = new_var * (1+Var2);
答案 1 :(得分:0)
我有同样的问题,到达这里寻找它。我提出了以下逻辑,因此想到在这里回答它以及未来的SAS爱好者:
使用(或创建)具有唯一值的现有(或新)变量。您可以在SAS中使用retain语句或在proc sql中使用monotonic()函数,如下所示:
/ 使用proc sql / proc sql; 创建表temp6为 选择一个。*,monotonic()作为var3从temp5作为a; 退出;
/ 使用数据步骤 / 数据temp7; 设定temp5; 保留var3; var3 + 1; 运行;
一旦有了这个变量,就可以先使用retain语句。用于计算New_Var的标志如下。我已经为第一行初始化了New_Var 1。您可以相应地更改初始值。
数据temp8; 设定temp7; by var3; 保留New_Var 1; 如果first.var3则New_Var = New_Var *(1 + Var2); 运行;
希望这会有所帮助!!