SAS編程-Table:SOC、PT、Severity的3層嵌套表格處理

之前文章SAS編程-Table:層級拼接法輸出AE SOC、PT的受試者發(fā)生率,介紹了SOC、PT的嵌套表格的處理。思路是,將SOC和PT變量的信息,整合到一個變量中,通過一個變量進行計數(shù)處理

有個讀者留言問,“2層的話怎么做,就是求ae pt的嚴重程度”,他問的應該是PT與Severity的嵌套如何輸出。如果使用層級拼接法來處理的話,這與SOC、PT與Severity的3層嵌套過程大體相同。這篇文章,介紹這個3層嵌套的處理過程。更多臨床試驗SAS編程內(nèi)容,歡迎關注:SAS茶談。

SOC、PT與SEV嵌套

首先,需要明確,添加SEV的嵌套與之前SOC、PT的嵌套是不同的。對于SEV的各類別信息,不管是否存在都需要將類別完全展示(如上圖);而SOC、PT的嵌套只需展示數(shù)據(jù)集既有的記錄

以上意味著,我們需要將可能不全的SEV信息全部展示。所以,像之前將三個變量轉(zhuǎn)化為單個變量進行處理,是不方便實現(xiàn)既定輸出的。

但由于SOC、PT的信息是直接展示數(shù)據(jù)中已有的記錄,我們是完全可以利用層級拼接將SOC、PT整合成一個變量(如之前文章介紹),然后將SEV的另做為分析分組變量進行處理。為顯示SEV的所有類別,在Means過程步中可以使用preloadfmt選項進行嵌套。

具體思路如上,代碼實現(xiàn)過程比前文多了一個分析分組變量sev以及對應的Format設置(class sevdisn/preloadfmt mlf order = data ;)。

程序附下文,代碼中Sevdisn保留了Missing的記錄(sevdisn=99),如果Missing行各組計數(shù)都為0,記錄一般會刪除。生成SEV的Preloadfmt時,添加了一個匯總行(1-3, 99 = 0),是為了輸出上一層嵌套類別的計數(shù)(如shell中的 SOC #1、PT #1行)。

這里就不對代碼進行詳細運行解釋,具體步驟可以參考前文解釋,若有疑問,歡迎評論區(qū)討論。

***1. Create formats for output;

**1.1 Format for Statistics;
proc format ;

    *Format for FREQ;
    picture freq (round default=8 )
        0 <-<9.95 = "009.9)" (prefix="(  " )
        9.95 -<99.5 = "009.9)" (prefix="( " )
        99.5-100 = "(100)  " (noedit) 
    ;

    *Format for trt;
    value trt01an
        1 = 1
        2 = 2
        3 = 3
    ;

    *Format for sev display num;
    value sevdisn(notsorted multilabel)
        1-3,99 = 0
        1 = 1
        2 = 2
        3 = 3
        99 = 99
    ;

    value $sevdis
        "1" = "Severe"
        "2" = "Moderate"
        "3" = "Mild"
        "99" = "Missing"
    ;

run;


***2. Get data for analysis;

**2.1 Get data for BigN;
data adsl;
    set adam.adsl;
    flag = 1;

    where saffl = "Y";

    proc sort;
        by usubjid;
run;


**2.2 Get data for small n;

data adae;
    merge adam.adae(in = a where=(aecat = "")) adsl(in = b);
    by usubjid;

    if a and b;

    *Set for missing values;
    if missing(aebodsys) then aebodsys = "Missing system organ class";
    if missing(aedecod) then aedecod = "Missing preferred term";

    *SEV display num;
    if aesevn = 1 then sevdisn = 3;
    else if aesevn = 2 then sevdisn = 2;
    else if aesevn = 3 then sevdisn = 1;
    else sevdisn = 99;

    *Combine all categories in one variable;
    length cat $200;

    cat = "01!"||"Subjects with at least one AE"; output;
    cat = "02!"||strip(aebodsys); output;
    cat = "02!"||strip(aebodsys)||"!"||strip(aedecod); output;

    proc sort nodupkey;
        by cat usubjid;
run;



***3. Calculate statistics;

**3.1 Derive BigN and save them to macro vars;

proc means data = adsl nway;
    class trt01an;
    var flag;

    output n = bign nmiss = nmiss out = BigN;
run;

data _null_;
    set BigN;
    call symput("N_"||strip(put(trt01an, best.)), strip(put(bign, best.)));
run;

*Check BigN;
proc sql noprint;
    create table BigNcheck as
        select *
        from dictionary.macros
        where name like "N_%";
quit;


**3.2 Derive statistic vars;
proc means data = adae noprint nway completetypes;
    format trt01an trt01an.;
    class trt01an /preloadfmt order = data  ;

    class cat;

    format sevdisn sevdisn.;
    class sevdisn/preloadfmt mlf order = data ;

    var flag; 

    output n=count nmiss=nmiss out=count1 ;
run;

data count2;
    merge count1(in = a) bign;
    by trt01an;

    length freq $200;
    if count = 0 then freq =strip(put(count, best.));
    else freq =strip(put(count, best.))||put(count/bign*100, freq.);

    if a;
 
    proc sort;
        by cat sevdisn trt01an; 
run;

proc transpose data = count2 out = count3 prefix = trt_;
    by cat sevdisn;
    id trt01an;
    var freq;
run;

以上輸出程序輸出的數(shù)據(jù)集如下,

count3

感謝閱讀, 歡迎關注:SAS茶談!
若有疑問,歡迎評論交流!

相關閱讀:
SAS編程-Table:頻數(shù)匯總表的總結
SAS編程-Table:層級關系的頻數(shù)匯總處理 ——層級拼接法
SAS編程-Table:層級拼接法輸出AE SOC、PT的受試者發(fā)生率

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容