2013-04-29 75 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