2015-09-25 131 views
-2

有誰知道如何使用SAS中的滯後,只考慮變量的最後已知數字,而不是缺少值,即不是「。」。按照以下順序:9,10,8,...,7?SAS滯後排除缺失值?

data have; 
    input val; 
    datalines; 
9 
10 
8 
. 
7 
; 
run; 

我想的表包含下列:

val want_val 
9 9 
10 10 
8 8 
. 8 
7 7 
+0

這不是SAS編程問題,而是一個關於如何使用SAS過程來轉換數據的問題。我建議你在community.sas.com上發佈非編程問題。作爲一個開始的好地方,請看PROC EXPAND和可能的轉換選項。這將允許你實現你的目標。 –

+0

這讀起來像一個編程問題的開始。建議您提供樣本數據,並描述您想要的輸出數據。同時顯示您嘗試過的任何代碼,以及爲什麼它不起作用。聽起來好像你正在試圖做「最後的觀察結果」而不是簡單的滯後。 Google搜索SAS LOCF可以幫助創意。 – Quentin

+0

我不明白這不是一個編程問題......它不是很詳細,但它可能比這裏的一半問題要好。 – Joe

回答

0

使用條件邏輯,而不是直接滯後功能。

  1. 使用滯後函數
  2. 創建另一個變量發生滯後功能僅當值不缺少創建一個滯後變量。

    data have; 
    input y; 
    cards; 
    9 
    10 
    8 
    . 
    7 
    ; 
    
    
    data want; 
    set have; 
    retain x_lag; 
    x=lag(y); 
    if x ne . then x_lag=x; 
    run; 
    
    proc print data=want; 
    var y x_lag; 
    run; 
    

OUTPUT:

        Obs  y x_lag 

            1  9  . 
            2  10  9 
            3  8  10 
            4  .  8 
            5  7  8 
+0

看起來好像完全相同的結果可以在不使用'lag'的情況下獲得,否?輸出後保留並設置它? – Joe

+0

取決於該步驟中還做了些什麼。如果只有滯後那麼工作,但如果你正在做其他處理可能會有一些問題。 – Reeza

+0

我不明白你的意見「取決於」,我運行了代碼,它似乎不工作。我同意Joe LAG對LOCF不好。 –

0

這可能是一種情況,使用IF語句LAG是一個好主意。一旦你理解了這兩個陳述如何協同工作,你可以利用它們來獲得優勢(或避免常見的陷阱)。我建議閱讀this瞭解更多詳情。

與此同時,這段代碼是做你想做的嗎?

data lags; 
input num; 
if not missing(num) then lag_num = lag(num); 
datalines; 
9 
10 
8 
. 
7 
; 
run; 
+0

這不是*很*正確,很可能(儘管問題不是很清楚)。大多數用例需要在每行都填充lag_num,並使用最新的nonmissing。 – Joe