【发布时间】:2016-01-21 14:08:52
【问题描述】:
我有一个包含 3,000 多个观察值的时间序列数据集。我正在尝试创建一个依赖于该变量先前值的新变量,并且我无法让 SAS 计算每个观测值,以确保在它进入下一个观测值之前计算先前的值。
我已将第一个观察值设置为 1。然后对于剩余的观察值,我希望 SAS 计算:
New_var = lag(new_var) * (1 + Var2)
有什么想法吗?我确信这是一个相对简单的答案,但我自己无法破译它。
【问题讨论】:
标签: sas
我有一个包含 3,000 多个观察值的时间序列数据集。我正在尝试创建一个依赖于该变量先前值的新变量,并且我无法让 SAS 计算每个观测值,以确保在它进入下一个观测值之前计算先前的值。
我已将第一个观察值设置为 1。然后对于剩余的观察值,我希望 SAS 计算:
New_var = lag(new_var) * (1 + Var2)
有什么想法吗?我确信这是一个相对简单的答案,但我自己无法破译它。
【问题讨论】:
标签: sas
您可以尝试使用保留语句而不是滞后。
retain new_var;
new_var = new_var * (1+Var2);
【讨论】:
我有同样的问题,并到达这里寻找它。我得出了以下逻辑,因此也想在这里为未来的 SAS 爱好者回答它:
使用(或创建)具有唯一值的现有(或新)变量。您可以在 SAS 中使用 retain 语句或在 proc sql 中使用 monotonic() 函数,如下所示:
/使用 proc sql/ 过程 sql; 创建表 temp6 为 选择 a.*, monotonic() as var3 from temp5 as a; 退出;
/使用数据步骤/ 数据 temp7; 设置温度5; 保留 var3; 变量3 + 1; 运行;
一旦你有了这个变量,你就可以使用retain语句和first。标志来计算 New_Var,如下所示。我已经用 1 为第一行初始化了 New_Var。您可以相应地更改初始值。
数据 temp8; 设置温度7; 通过 var3; 保留 New_Var 1; 如果 first.var3 则 New_Var = New_Var * (1 + Var2); 运行;
希望这会有所帮助!
【讨论】: