簡體   English   中英

如何獲得 sas 中連續兩次缺失的最后一個非缺失

[英]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_datlast_nonmissing_avisit中,以便在遇到缺失值時它們總是結轉。 當連續出現兩個缺失值時,我們得到 output 的結果。

每當我們移動到新的subjid時, nmisslast_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM