2016-01-21 128 views
1

我有3000多个观测值的时间序列数据集。我试图创建一个依赖于该变量的先前值的新变量,并且我无法让SAS计算每个观察值,以确保先前的值在计算到下一个观察值之前计算出来。SAS新变量基于新变量的优先值

我已经设置了第一观察到1。然后对剩余的观测我想SAS来计算:

New_var =滞后(new_var)*(1 + VAR2)

任何想法?我相信这是一个相对简单的答案,但我自己无法破译。

回答

3

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

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

重要的是要注意,输入SET或MERGE数据集中new_var不能存在(即使丢失)。 – DomPazz

0

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

  1. 使用(或创建),它具有独特的价值现有的(或新的)变量。你可以使用在SAS或单调()函数在PROC SQL语句保留,如下所示:

    /使用PROC SQL/ PROC SQL; 创建表temp6为 从temp5中选择a。*,monotonic()as var3作为a; quit;

    /使用数据步骤/ 数据temp7; 设置temp5; retain var3; var3 + 1; 跑;

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

    data temp8; 设置temp7;由var3提供的 ; 保留New_Var 1;如果first.var3则为New_Var = New_Var *(1 + Var2); 跑;

希望这有助于!