2015-10-16 76 views
0

我使用SAS基地V9.4問題LAG功能(SAS)

我有我的每個客戶的日均餘額,我想看看他們是否增加或減少其資產從一天到另一個。所以我寫了下面的代碼,但我收到以下錯誤。 「

」錯誤72-185:LAG函數調用的參數太多。「

IF LAG(CUST_ID,1)=CUST_ID AND (BALANCE - LAG(BALANCE,1))>0 THEN FLAG="FLAG=1" 

可能是什麼問題呢?

+2

嘗試使用LAG1(CUST_ID),而不是滯後(CUST_ID,1),同爲平衡 – stat

+1

您也可以使用'DIF'函數,而不是'LAG'計算當前和以前的值之間的差(即'DIF(BALANCE)> 0')。你的'IF'語句應該可以在這裏正常工作,但要小心使用'IF'和'LAG'。 「干擾素」通常是一個更好的選擇,因爲[這裏]解釋的原因(http://www.howles.com/saspapers/CC33.pdf) – Longfish

+0

完全避免滯後並使用「保留」。 –

回答

3

延遲的深度是函數名稱的一部分,而不是參數。所以你需要LAG1(BALANCE)而不是LAG(BALANCE,1)LAG1()可以縮短爲LAG()。如果您想處理您的數據BY客戶,請添加一條BY語句。這將創建FIRST.LAST.變量。如果您只需要差異而不是實際的先前值,則還應該查看DIF()系列函數。

data want ; 
    set have ; 
    by cust_id; 
    if dif(balance) > 0 and not first.cust_id then flag='FLAG=1' ; 
+0

由cust_id和日期確定訂單 – vasja