[英]How to get the last nonmissing prior two consecutive missing in sas
我正在嘗試將 select 最后一個非缺失的 DAT 值賦給 ADT,如果 SUBJID 有兩個連續缺失的 DAT,否則最新的 DAT 將被設置為 ADT 的值。 下面的代碼生成我擁有的數據,我想讓 ADT 可以用下面規則的插圖導出(最終合並到這個集合 HAVE 或只是創建一個全新的集合):
對於 subjid 1001: 1997-05-01 對於這個主題,沒有連續缺失(盡管只有一個非連續缺失)
對於 subjid 1002: 1998-02-01,因為這個主題在 2-5 的 AVISIT 中連續丟失
對於 subjid 1003: 1999-03-08,由於第一次連續缺失發生在 AVISIT 為 4 時,並且在 AVISIT=3 時,存在非缺失 DAT。
希望您能夠幫助我。 謝謝。
data have;
infile datalines truncover;
input subjid avisit dat : yymmdd10.;
format dat yymmdd10.;
datalines;
1001 0 1997-01-01
1001 1 1997-02-01
1001 2
1001 3 1997-05-01
1002 0 1998-01-01
1002 1 1998-02-01
1002 2
1002 3
1002 4
1002 5
1002 6 1998-12-01
1003 0 1999-01-01
1003 1 1999-02-01
1003 2
1003 3 1999-03-08
1003 4
1003 5
1003 6 1999-05-01
1003 7
1003 8
;
run;
每當連續缺失dat
的計數大於或等於 2 時,下面將創建一個包含最后一個非缺失數據的數據集。每次遇到缺失dat
時,我們nmiss
dat
1。
我們總是將dat
的最后一個有效值存儲在變量last_nonmissing_dat
和last_nonmissing_avisit
中,以便在遇到缺失值時它們總是結轉。 當連續出現兩個缺失值時,我們得到 output 的結果。
每當我們移動到新的subjid
時, nmiss
和last_nonmissing
被重置。
data want;
set have;
by subjid;
retain last_nonmissing_dat
last_nonmissing_avisit
;
if(first.subjid) then call missing(nmiss, of last_nonmissing:);
if(missing(dat)) then nmiss+1;
else do;
nmiss = 0;
last_nonmissing_dat = dat;
last_nonmissing_avisit = avisit;
end;
if(nmiss GE 2) then output;
format last_nonmissing_dat yymmdd10.;
run;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.