徐 凱 孫瑞華 李 歡 郭銳敏 肖 暢 虞康達(dá) 吳婉玲 黃 傲 王雨萌
1.北京中醫(yī)藥大學(xué)管理學(xué)院(100029)
2.中日友好醫(yī)院科研處
△通信作者:孫瑞華,E-mail:sunruihua@263.net126.com
·計算機(jī)應(yīng)用·
臨床試驗(yàn)中定性指標(biāo)統(tǒng)計分析報表的SAS宏實(shí)現(xiàn)
徐 凱1孫瑞華2△李 歡1郭銳敏1肖 暢1虞康達(dá)1吳婉玲1黃 傲1王雨萌1
SAS軟件是業(yè)界公認(rèn)的一款統(tǒng)計分析軟件,在臨床試驗(yàn)的統(tǒng)計分析中應(yīng)用十分廣泛。應(yīng)用其強(qiáng)大的宏程序功能,可以高效快捷地實(shí)現(xiàn)報表的自動化輸出,使統(tǒng)計結(jié)果直接生成Word統(tǒng)計報表,避免了以往手工粘貼統(tǒng)計結(jié)果出現(xiàn)錯誤的問題[1-2]。根據(jù)統(tǒng)計分析報告中常用的格式,本文將編寫一套較為通用的定性指標(biāo)(結(jié)果變量有序或者無序)的統(tǒng)計分析SAS宏程序。
根據(jù)統(tǒng)計學(xué)原理,常用頻數(shù)、百分比/構(gòu)成比等指標(biāo)對計數(shù)資料進(jìn)行統(tǒng)計學(xué)描述。統(tǒng)計分析時,需根據(jù)資料是否有序,合理選擇統(tǒng)計分析方法。成組設(shè)計的列聯(lián)表資料,結(jié)果變量為無序時,組間比較需選用卡方檢驗(yàn),若樣本例數(shù)<40或理論頻數(shù)<5時則采用Fisher精確概率法;結(jié)果變量為多項(xiàng)且有序時,需根據(jù)計數(shù)資料的結(jié)果變量數(shù)目,合理選擇統(tǒng)計分析的方法。統(tǒng)計分析需選用兩組間Wilcoxon秩和檢驗(yàn)進(jìn)行比較[3]。為直接得到結(jié)果變量有序的表1和結(jié)果變量無序的表2所示的統(tǒng)計分析報表結(jié)果,結(jié)合SAS宏程序的強(qiáng)大功能,編寫相應(yīng)的定性指標(biāo)的統(tǒng)計分析SAS宏程序。
表1 組間有效率分析
表2 組間性別比較分析
在宏程序中定義了六個宏變量,即&dataset、&sfyx、&group、&yx、&position、&fmt,分別為分析數(shù)據(jù)集、結(jié)果變量有序判定、組別、待分析的結(jié)果變量、文件保存位置、定義輸出格式。
%macro jishu(dataset,sfyx,group,yx,position,fmt);
利用SAS的數(shù)據(jù)傳輸系統(tǒng)(ods)將列聯(lián)表的統(tǒng)計描述數(shù)據(jù)輸入到指定的SAS數(shù)據(jù)集中,對指定數(shù)據(jù)集進(jìn)行拆分后使每組統(tǒng)計描述結(jié)果處于一列,再進(jìn)行橫向合并操作。
/*利用freq程序輸出統(tǒng)計描述部分結(jié)果到CrossTabFreqs1 數(shù)據(jù)集中,并輸出卡方檢驗(yàn)結(jié)果到chisq1數(shù)據(jù)集,將精確概率法結(jié)果輸出到fisherexact1數(shù)據(jù)集,并將CrossTabFreqs1 數(shù)據(jù)集拆分為psa和psb,經(jīng)過處理后再橫向合并成ms數(shù)據(jù)集*/
ods output CrossTabFreqs=CrossTabFreqs1 chisq=chisq1 fishersexact=fisherexact1;
proc freq data=&dataset;
tables &yx*&group/chisq expected fisher;
/*對CrossTabFreqs1數(shù)據(jù)集分別拆分成A組描述數(shù)據(jù)集psa、B組描述數(shù)據(jù)集psb,并橫向組合處理*/
data Crosstabfreqs;
set Crosstabfreqs1;
keep & yx&group Frequency colpercent;
data psa psb;
set Crosstabfreqs1;
if&group="A" then output psa;else output psb;
data psa;
set psa;
if colpercent=.then colpercent=100;
if &yx=.then &yx=99;
colpercent=round(colpercent,0.01);
psa=cat(Frequency,"(",colpercent,")");
keep &yx psa;
data psb;
set psb;where &group="B";
if &yx=.then &yx=99;
if colpercent=.then colpercent=100;
colpercent=round(colpercent,0.01);
psb=cat(Frequency,"(",colpercent,")");
keep &yx psb;
/*將A、B組的統(tǒng)計描述的結(jié)果合并在ms數(shù)據(jù)集中*/
data ms;
merge psa psb;
by &yx;
run;
利于在方法和結(jié)果的選擇,對前面生成的chisq1和fisherexact1數(shù)據(jù)集進(jìn)行處理,生成卡方統(tǒng)計量及P值數(shù)據(jù)集chisq1,生成精確概率法P值數(shù)據(jù)集fisherexact。
/*抓取總樣本例數(shù)和理想頻數(shù)最小值的宏變量*/
data expected;
set crosstabfreqs1;
keep expected frequency;
proc summary data=expected;
var expected frequency;
output out=expmin min(expected)=expmin max(frequency)=n;
data expected;
set expmin;
call symput (′expmin′,expmin);
call symput (′n′,n);
/*處理chisq1數(shù)據(jù)集,挑選出卡方統(tǒng)計量和P值,生成chisq1數(shù)據(jù)集*/
data chisq1;
set chisq1;
by table;
if first.table;
value=round(value,0.01);
prob=round(prob,0.0001);
value1=cat("卡方=",value);
prob1=cat("P=",prob);
keep value1 prob1;
/*處理fisherexact1數(shù)據(jù)集,挑選出精確概率法的P值,生成fisherexact數(shù)據(jù)集*/
data fisherexact;
set fisherexact1;
by table;
if first.table;
if label1^="" then label1="精確概率法";
cvalue1=round(cvalue1,0.0001);
cvalue=cat(label1,"=",cvalue1);
keep cvalue;
根據(jù)不同的條件,選擇合適的統(tǒng)計分析方法及其結(jié)果,需首先判斷結(jié)果變量有序與否。若結(jié)果變量為無序,則程序會根據(jù)樣本總例數(shù)和最小理論頻數(shù)輸出不同的統(tǒng)計分析結(jié)果。樣本總例數(shù)≥40且最小理論頻數(shù)≥5時,則會自動輸出卡方分析結(jié)果,否則輸出fisher精確概率法的結(jié)果。若結(jié)果變量為有序時,則程序會自動輸出兩組間Wilcoxon秩和檢驗(yàn)的結(jié)果。
/*結(jié)果變量為無序時,執(zhí)行以下輸出結(jié)果操作*/
%if &sfyx="無序" %then %do;
data kf;
if & n>=40 and &expmin>=5 then do;
merge ms chisq1;
file & position mod;
put @10 &yx @29 psa @53 psb @ 75 value1 @85 prob1;
format & yx.&fmt..;
end;
else if &n<40 or &expmin<5 then do;
merge ms fisherexact;
file &position mod;
put @10 &yx @29 psa @53 psb @75 cvalue;
format &yx.&fmt..;end;
run;
%end;
/*結(jié)果變量為有序時,用npar1way程序輸出統(tǒng)計分析結(jié)果到WilcoxonTest數(shù)據(jù)集中,執(zhí)行以下輸出結(jié)果操作*/
%if &sfyx="有序" %then %do;
Ods Output WilcoxonTest=WilcoxonTest1;
proc npar1way wilcoxon data=&dataset;
var &yx;
class &group;
run;
data WilcoxonTest;
set WilcoxonTest1;
where Name1="Z_WIL" or Name1="P2_WIL";
if Name1="P2_WIL" then Name1="P值";
cvalue1=round(cvalue1,0.0001);
cvalue=cat(name1,"=",cvalue1);
keep cvalue;
data kf;
merge ms WilcoxonTest;
file &position mod;
put @10 &yx @29 psa @53 psb @ 75 cvalue;
format &yx.&fmt..;
run;
%end;%mend jishu;
%macro biaotou(title,position);
data _null_;
long="&title";left=int((96-length(long))/2);
file &position mod;
put #1@left "&title"
#2 @2 97*′_′
#3 @10 ′指標(biāo)項(xiàng)′ @29 ′A組′ @53 ′B組′ @75 ′統(tǒng)計量和P值′
#4 @2 97*′_′;
run;
%mend biaotou;
%macro biaowei(position);
data _null_;
file &position mod;
put @2 97*′_′;
run;
%mend biaowei;
將以上所有宏程序提交運(yùn)行,提交以下程序后,即可輸出表1和表2所示的統(tǒng)計分析三線表格。
/*需事先設(shè)定好格式化,使結(jié)果變量更加直觀地輸出;設(shè)置title的表格名稱;人為判斷待分析的結(jié)果變量有序與否,若結(jié)果變量為有序則應(yīng)將sfyx設(shè)置為“有序”,否則應(yīng)將sfyx設(shè)置為“無序”;將所有的position設(shè)置,其代表的是:三線表格rtf文件名及其存儲的位置*/
proc format;
value fmt 1=′顯效 N(%)′ 2=′有效 N(%)′ 3=′無效 N(%)′ 99="合計";
value sexf 1=′男 N(%)′ 2=′女 N(%)′ 99="合計";
run;
%biaotou(title=表格1 組間有效率分析,position=′test.rtf′);
%jishu(dataset=data1,sfyx="有序",group=group,yx=yx,position=′test.rtf ′,fmt=fmt);
%biaowei(position=′test.rtf′);
%biaotou(title=表格2 組間性別比較分析,position=′test.rtf′);
%jishu(dataset=data1,sfyx="無序",group=group,yx=sex,position=′test.rtf ′,fmt=sexf);
%biaowei(position=′test.rtf′);
SAS有極其強(qiáng)大的統(tǒng)計分析功能,在國內(nèi)外很多統(tǒng)計學(xué)專業(yè)人士采用SAS對新藥臨床試驗(yàn)的數(shù)據(jù)進(jìn)行數(shù)據(jù)管理和統(tǒng)計分析[4],加之SAS宏程序快捷方便,已成為業(yè)界公認(rèn)的統(tǒng)計分析軟件之一。本文基于SAS自帶的ODS輸出傳送系統(tǒng)將統(tǒng)計分析結(jié)果以rtf富文本的格式輸出三線表。同時根據(jù)結(jié)果變量的有序與否,利用SAS宏程序的強(qiáng)大功能,使其能夠根據(jù)設(shè)置自動地選擇恰當(dāng)?shù)慕y(tǒng)計分析方法,并自動輸出相應(yīng)的統(tǒng)計報表。本文介紹了簡單實(shí)用的SAS宏程序,其結(jié)果已經(jīng)過驗(yàn)證準(zhǔn)確可靠,適合結(jié)果變量有序與否的定性資料的組間比較。
[1] 李子建,苗青,劉元東.疫情Word報表的SAS編程實(shí)現(xiàn).解放軍預(yù)防醫(yī)學(xué)雜志,2005,23(3):216-218.
[2] 王雨萌,孫瑞華,黃傲,等.單因素多水平臨床試驗(yàn)定量指標(biāo)統(tǒng)計分析報表的SAS宏實(shí)現(xiàn).中國衛(wèi)生統(tǒng)計,2016,33(4):712-714.
[3] 孫振球.醫(yī)學(xué)統(tǒng)計學(xué).第3版.北京:人民衛(wèi)生出版社,2010:141.
[4] 童新元,張高魁,姚晨.定性指標(biāo)的SAS統(tǒng)計分析報表——SAS軟件在新藥臨床試驗(yàn)統(tǒng)計分析中的應(yīng)用(一).中國衛(wèi)生統(tǒng)計,2003,20(1):50-51.
(責(zé)任編輯:張 悅)