2017-03-01 119 views
-1

需要創建一個新變量來重複ID訪問的最早日期,如果遺漏了該變量,則應該輸入遺漏,遺漏後應該保留最早的日期失蹤了(就像在這個例子中)。我試過LAG功能,但沒有工作;我也嘗試保持功能,但只是重複所有記錄的25NOV2015。最後的結果/「我需要的」在最後一欄。SAS-如何保持考慮缺失的最早日期

感謝

Example

回答

0

您需要使用retain聲明。保留意味着你在每個觀察中的價值不會被重新初始化爲失蹤。因此,在數據步驟的下一次迭代中,變量會記住它的值。

的樣本數據

data a; 
    input date; 
    format date ddmmyy10.; 
datalines; 
. 
5 
6 
7 
. 
1 
2 
. 
9 
; 
run; 

解決方案

data b; 
    set a; 

    retain new_date; 
    format new_date ddmmyy10.; 

    if date = . then 
     new_date = .; 

    if new_date = . then 
     new_date = date; 
run; 
+0

太謝謝你了羅伯特。但是,如果我嘗試使用多個ID?我試圖把數據b; 設置一個; BY ID; – Anna

+0

它沒有工作。抱歉。你能幫我嗎? – Anna

+0

請將您的代碼粘貼到問題上。 –

0

既然你沒有張貼任何資料,我會彌補一些。另外,由於你的變量是一個日期的事實並沒有真正影響到答案,所以我將使用一些整數,因爲它們更容易輸入。

data have ; 
    input id value @@ ; 
cards; 
1 . 1 2 1 3 1 . 1 5 1 6 1 . 1 8 
2 1 2 2 2 3 2 . 2 5 2 6 
;;;; 

基本上你的算法說,當你想要存儲當前值丟失或存儲值丟失時的值。對於多個BY組,當您啓動一個新組時,您也需要設置它。

data want ; 
set have ; 
by id ; 
retain new_value ; 
if first.id or missing(new_value) or missing(value) 
    then new_value=value; 
run; 

結果:

     new_ 
Obs id value value 

    1  1  .  . 
    2  1  2  2 
    3  1  3  2 
    4  1  .  . 
    5  1  5  5 
    6  1  6  5 
    7  1  .  . 
    8  1  8  8 
    9  2  1  1 
10  2  2  1 
11  2  3  1 
12  2  .  . 
13  2  5  5 
14  2  6  5 
+0

湯姆,非常感謝你,對我來說非常重要,有一個解決方案。我是新來的,對不起,我沒有發佈任何數據,我很迷茫。再次感謝你!有用! – Anna