2013-04-29 192 views
1

我“迷路了具有滞后功能;在这里下面就是我想要做 enter image description here如何使用滞后函数计算在SAS

data out; 
    set in; 
    by a; 
y = 0.5 ; 
y = lag(y) * (1 - x); end; 
run; 

‘在’表只有X和序列值A,我想要的是创建“出”表,其中Y值从“0.5”开始,然后Y的其余部分将来自先前Y值的计算乘以(1-X)=> Y = lagY *( 1 - X)

我试图使用延迟功能,但它确实给了我想要的东西..

请帮忙。 谢谢。

+0

请你能更多的数据添加到您的表A和X列,直到找到x的值= 1 – Zeddy 2013-04-30 02:29:17

回答

5

LAG函数针对读入的数据起作用。由于变量y不存在于输入数据集中,因此LAG函数不会按照您的要求工作。

而是使用RETAIN语句来保存y的前一个值。

data in; 
input A x; 
datalines; 
1 0.25 
2 0.16 
3 0.1 
4 0.5 
5 0.6 

data out; 
    set in; 
    by A; 
retain y 0.5; 
if _n_>1 then y=y*(1-x); 
run; 
+1

也许值得说明的是保留Y 0.5;在FIRST迭代中将y初始化为0.5的值,然后超出它保持前一次迭代的值的任何值 – Joe 2013-04-30 13:41:23

+0

谢谢,以前从未知道,这是很棒的提示:) – JPC 2013-04-30 14:48:57