2016-12-29 122 views
0

試圖創建計算當前記錄日期和以前的記錄日期(由patid分組)之間的天數的變量。我很明顯錯過了一些嘗試,而且不幸的是我做了很多事情。SAS first.dot last.dot日期計算

任何答案,將不勝感激。

data sample; 
informat patid $1. test_date mmddyy10.; 
input patid test_date; 
format test_date date9.; 
datalines; 
a 10/01/2005 
a 10/05/2005 
a 10/17/2005 
b 10/02/2005 
b 10/18/2005 
b 10/22/2005 
; 
run; 

我想我的數據集看起來像這樣:

data desire; 
informat patid $1. test_date mmddyy10. dif; 
input patid test_date dif; 
format test_date date9.; 
datalines; 
a 10/01/2005 0 
a 10/05/2005 4 
a 10/17/2005 12 
b 10/02/2005 0 
b 10/18/2005 16 
b 10/22/2005 4 
; 
run; 

我嘗試:

data increment; 
set sample; 
by patid; 
if first.patid then do; 
dys_btwn_trmnt = 0; 
end; 
else do; 
    dys_btwn_trmnt=dif(test_date); 
end; 
run; 

後來我想我可能需要保留,但沒有成功 -

data increment; 
set sample; 
by patid; 
retain dys_btwn_trmnt 0; 
if first.patid then do; 
dys_btwn_trmnt = 0; 
end; 
else do; 
    dys_btwn_trmnt=dif(test_date); 
end; 
run; 

回答

4

這是Y的時候會發生什麼的例子有條件地執行滯後函數(在這種情況下爲DIF()函數)。要做的滯後函數返回先前觀察值。相反,它們從通過執行函數創建的堆棧中返回值。通過不爲每個觀察執行該函數,並非所有的值都被放置在堆棧上。

簡單的解決方案是運行DIF()功能爲每個觀察,然後使用第一個。條件來確定組中第一個觀察值。

data increment; 
    set sample; 
    by patid; 
    dys_btwn_trmnt=dif(test_date); 
    if first.patid then dys_btwn_trmnt=0; 
run; 
+0

謝謝!這種方法更有意義。 +1的幫助。 – SMW