需要創建一個新變量來重複ID訪問的最早日期,如果遺漏了該變量,則應該輸入遺漏,遺漏後應該保留最早的日期失蹤了(就像在這個例子中)。我試過LAG功能,但沒有工作;我也嘗試保持功能,但只是重複所有記錄的25NOV2015。最後的結果/「我需要的」在最後一欄。SAS-如何保持考慮缺失的最早日期
感謝
需要創建一個新變量來重複ID訪問的最早日期,如果遺漏了該變量,則應該輸入遺漏,遺漏後應該保留最早的日期失蹤了(就像在這個例子中)。我試過LAG功能,但沒有工作;我也嘗試保持功能,但只是重複所有記錄的25NOV2015。最後的結果/「我需要的」在最後一欄。SAS-如何保持考慮缺失的最早日期
感謝
您需要使用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;
既然你沒有張貼任何資料,我會彌補一些。另外,由於你的變量是一個日期的事實並沒有真正影響到答案,所以我將使用一些整數,因爲它們更容易輸入。
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
湯姆,非常感謝你,對我來說非常重要,有一個解決方案。我是新來的,對不起,我沒有發佈任何數據,我很迷茫。再次感謝你!有用! – Anna
太謝謝你了羅伯特。但是,如果我嘗試使用多個ID?我試圖把數據b; 設置一個; BY ID; – Anna
它沒有工作。抱歉。你能幫我嗎? – Anna
請將您的代碼粘貼到問題上。 –