【问题标题】:SAS new variable based on new variable's preivous value基于新变量先前值的 SAS 新变量
【发布时间】:2016-01-21 14:08:52
【问题描述】:

我有一个包含 3,000 多个观察值的时间序列数据集。我正在尝试创建一个依赖于该变量先前值的新变量,并且我无法让 SAS 计算每个观测值,以确保在它进入下一个观测值之前计算先前的值。

我已将第一个观察值设置为 1。然后对于剩余的观察值,我希望 SAS 计算:

New_var = lag(new_var) * (1 + Var2)

有什么想法吗?我确信这是一个相对简单的答案,但我自己无法破译它。

【问题讨论】:

    标签: sas


    【解决方案1】:

    您可以尝试使用保留语句而不是滞后。

    retain new_var;
    new_var = new_var * (1+Var2);
    

    【讨论】:

    • 重要的是要注意 new_var 在输入 SET 或 MERGE 数据集上不能存在(即使缺失)。
    【解决方案2】:

    我有同样的问题,并到达这里寻找它。我得出了以下逻辑,因此也想在这里为未来的 SAS 爱好者回答它:

    1. 使用(或创建)具有唯一值的现有(或新)变量。您可以在 SAS 中使用 retain 语句或在 proc sql 中使用 monotonic() 函数,如下所示:

      /使用 proc sql/ 过程 sql; 创建表 temp6 为 选择 a.*, monotonic() as var3 from temp5 as a; 退出;

      /使用数据步骤/ 数据 temp7; 设置温度5; 保留 var3; 变量3 + 1; 运行;

    2. 一旦你有了这个变量,你就可以使用retain语句和first。标志来计算 New_Var,如下所示。我已经用 1 为第一行初始化了 New_Var。您可以相应地更改初始值。

      数据 temp8; 设置温度7; 通过 var3; 保留 New_Var 1; 如果 first.var3 则 New_Var = New_Var * (1 + Var2); 运行;

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2020-08-24
      • 2017-04-13
      • 1970-01-01
      • 1970-01-01
      • 2018-06-05
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      相关资源
      最近更新 更多