之前文章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茶談。

首先,需要明確,添加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ù)集如下,

感謝閱讀, 歡迎關注:SAS茶談!
若有疑問,歡迎評論交流!
相關閱讀:
SAS編程-Table:頻數(shù)匯總表的總結
SAS編程-Table:層級關系的頻數(shù)匯總處理 ——層級拼接法
SAS編程-Table:層級拼接法輸出AE SOC、PT的受試者發(fā)生率