東南大學(xué)公共衛(wèi)生學(xué)院流行病與衛(wèi)生統(tǒng)計(jì)學(xué)系(210009) 潘俊霞 王詩遠(yuǎn) 楊嘉瑩 羅 櫟 劉 沛
疫苗臨床試驗(yàn)中,為了保證數(shù)據(jù)的準(zhǔn)確性和完整性,在統(tǒng)計(jì)分析前需進(jìn)行盲態(tài)核查。但盲態(tài)核查工作量較大,單純?nèi)斯げ僮骱馁M(fèi)大量人力和時(shí)間,還會(huì)核查不全面,導(dǎo)致數(shù)據(jù)質(zhì)量低,統(tǒng)計(jì)結(jié)果遭受質(zhì)疑。SAS因其強(qiáng)大功能為解決這些問題提供了有力工具。SAS宏程序的使用能將程序編得更高效且便于維護(hù),重復(fù)執(zhí)行SAS程序明顯提高了工作效率和質(zhì)量[1]。利用在SAS中調(diào)用excel參數(shù)表的方式實(shí)現(xiàn)盲態(tài)核查批量操作,再利用SAS/AF(applications facility,AF)模塊將復(fù)雜代碼屏蔽而僅通過界面點(diǎn)擊式操作實(shí)現(xiàn)盲態(tài)核查結(jié)果自動(dòng)化輸出,降低SAS使用門檻,規(guī)范且高效完成盲態(tài)核查工作。本文以開發(fā)疫苗臨床試驗(yàn)盲態(tài)核查自動(dòng)化輸出軟件為例,運(yùn)用SAS 9.4中的AF模塊結(jié)合SAS宏程序構(gòu)建特定功能的AF界面,從而實(shí)現(xiàn)盲態(tài)核查結(jié)果可視化自動(dòng)化輸出。
在疫苗臨床試驗(yàn)中,需要核查的內(nèi)容多且繁瑣,根據(jù)數(shù)據(jù)庫中變量類型將可能出現(xiàn)的問題歸納為三大類,分別是單變量核查(缺失值、極端值和重復(fù)值等)、多變量邏輯核查(入選排除標(biāo)準(zhǔn)、年齡分組、是否超窗、變量前后信息是否匹配等)和匯總變量核查(合并用藥、合并疫苗、不良反應(yīng)等)。根據(jù)數(shù)據(jù)庫中變量類型及可能出現(xiàn)的問題,我們?cè)O(shè)計(jì)出4個(gè)主要的SAS宏程序以實(shí)現(xiàn)上述盲態(tài)核查過程。分別是縱向列表變量轉(zhuǎn)置成橫向數(shù)據(jù)的宏程序,單變量核查宏程序,多變量邏輯核查宏程序和匯總變量核查宏程序,依次為% TransForm( )、% SingleVar()、% Logic( )和% IndexCheck( ),當(dāng)然此處4個(gè)宏里面還套用了其他宏程序,此處不再贅述。
SAS 宏利用%macro開始一個(gè)宏,同時(shí)給出這個(gè)宏的名字,如:%macro SingleVar;用%mend 語句結(jié)束一個(gè)宏,其后給出宏的名字,如%mend SingleVar。調(diào)用這個(gè)宏只需要用%SingleVar()語句,括號(hào)內(nèi)的變量稱為宏參數(shù),可在調(diào)用宏時(shí)指定參數(shù)值[2-3]。而為了實(shí)現(xiàn)上述宏程序且便于批量對(duì)宏參數(shù)進(jìn)行賦值,可以在SAS中利用其與excel的結(jié)合,將宏參數(shù)寫入excel中并在調(diào)用時(shí)對(duì)其賦值,該過程主要可通過在SAS中使用以下X命令來實(shí)現(xiàn):
OPTIONS XWAIT XSYNC;
X "&ParOut..xlsx";
OPTIONS NOXWAIT NOXSYNC;
OPTIONS后的選項(xiàng)XWAIT 表示在執(zhí)行時(shí)保持DOS命令窗口打開,NOXWAIT 則表示關(guān)閉DOS窗口;XSYNC表示在外部應(yīng)用excel執(zhí)行完之后再返回SAS中,NOXSYNC則表示外部應(yīng)用執(zhí)行完后不返回SAS。上述語句的主要功能是在SAS運(yùn)行過程中打開&ParOut.位置下的excel參數(shù)表,在excel中填寫完相應(yīng)參數(shù)值,然后關(guān)閉excel繼續(xù)回到SAS中運(yùn)行后續(xù)程序。此法能實(shí)現(xiàn)SAS與excel的無縫銜接,更是實(shí)現(xiàn)盲態(tài)核查結(jié)果自動(dòng)化、批量輸出的關(guān)鍵。
SAS/AF模塊是SAS母體下一個(gè)可用于實(shí)現(xiàn)可視化過程的工具。利用SAS/AF中框架(frame)可以對(duì)顯示界面進(jìn)行控制,利用SCL語言(SAS component language/SAS screen control language,SCL)則可對(duì)界面的性質(zhì)以及運(yùn)行過程進(jìn)行控制[4]。當(dāng)然配合SAS宏程序的使用可以使AF界面實(shí)現(xiàn)更多功能,比如可以將上述宏程序整合到AF界面中,制作一個(gè)用于盲態(tài)核查的完整界面,以實(shí)現(xiàn)無需復(fù)雜編程,只點(diǎn)擊屏幕和填寫excel參數(shù)表即可實(shí)現(xiàn)盲態(tài)核查結(jié)果自動(dòng)化和可視化輸出的功能[5]。
為了對(duì)某流感疫苗臨床試驗(yàn)數(shù)據(jù)進(jìn)行盲態(tài)核查,該項(xiàng)目入組2400人,其中3歲以下年齡組1200人,3歲以上年齡組1200人;包含2個(gè)CRF庫,其中3歲以下組包含930個(gè)變量(2針次),3歲以上組包含551個(gè)變量(1針次),變量又分成各種類型,主要包含基本信息、訪視信息、匯總信息。如果手工編程進(jìn)行核查需要對(duì)上千個(gè)變量進(jìn)行單獨(dú)的核查,其工作量和復(fù)雜程度不言而喻。為了對(duì)上述項(xiàng)目進(jìn)行盲態(tài)核查并使其結(jié)果能自動(dòng)化和可視化輸出,可在本軟件中執(zhí)行如下步驟:(1)標(biāo)準(zhǔn)化數(shù)據(jù)入口,(2)縱向列表變量轉(zhuǎn)置,(3)單變量核查,(4)多變量核查(包含匯總變量核查),(5)盲態(tài)核查結(jié)果報(bào)告。具體過程是先對(duì)從Epidata或EDC中導(dǎo)出的數(shù)據(jù)進(jìn)行變量名、變量標(biāo)簽和值標(biāo)簽的標(biāo)準(zhǔn)化,并對(duì)縱向列表變量數(shù)據(jù)(主要指不良反應(yīng)、合并用藥、合并疫苗等信息)進(jìn)行轉(zhuǎn)置,繼而對(duì)完整數(shù)據(jù)庫進(jìn)行單變量、多變量、匯總變量的核查,最后將所有的核查結(jié)果進(jìn)行匯總以excel和RTF格式輸出詢問表和盲態(tài)核查報(bào)告。受篇幅所限,此處僅以橫向數(shù)據(jù)結(jié)果輸出界面為例說明SAS/AF與SAS宏的結(jié)合使用。

圖1 疫苗臨床試驗(yàn)盲態(tài)核查軟件結(jié)果輸出界面
由于目前處于EDC系統(tǒng)和Epidata數(shù)據(jù)庫都在使用的階段,圖1所示橫向數(shù)據(jù)界面代表Epidata數(shù)據(jù)庫,我們也另外設(shè)計(jì)了縱向數(shù)據(jù)的界面以適用EDC系統(tǒng)的數(shù)據(jù),此處不再贅述。圖1所示界面運(yùn)行過程是通過左上方的下拉菜單可以選擇核查次數(shù)和病例報(bào)告表(case report form,CRF)的具體值,接下來選擇項(xiàng)目名稱后點(diǎn)擊選中按鈕可在選擇已有數(shù)據(jù)集欄中顯示前面核查界面該項(xiàng)目中產(chǎn)生的所有核查結(jié)果數(shù)據(jù)集,選擇某個(gè)數(shù)據(jù)集如:Checkr.Missing后點(diǎn)擊查看按鈕可以在右側(cè)視窗中查看該次核查出現(xiàn)的缺失值的問題,受頁面限制,僅顯示了一半,可水平和豎直滑動(dòng)視窗進(jìn)行結(jié)果查看。隨后點(diǎn)擊報(bào)告可在規(guī)定的路徑下產(chǎn)生上述單變量、邏輯核查及匯總變量核查有問題的RTF文件,點(diǎn)擊下一步可以將這些RTF單表合并成一份盲態(tài)核查報(bào)告,而點(diǎn)擊詢問表則可以產(chǎn)生名為詢問表的excel文件,如圖2所示。部分實(shí)現(xiàn)程序如下:
Check:
if display2.selectedItem ne "" then do;
displayTable=display2.selectedItem;
end;
sasdataset1.table=displayTable;
return;
/*以上程序是查看按鈕的SCL語言,把用戶選擇的已有數(shù)據(jù)集中的某個(gè)數(shù)據(jù)集賦值displayTable并在右側(cè)視窗中查看該數(shù)據(jù)集*/
Quetable:
submit continue;
%ResultOutput(ParOut=%str(&ROOT.casefile&casenameoutput&cs),type=excel);
endsubmit;
return;
以上程序是詢問表按鈕的SCL語言,它將宏%ResultOutput()寫進(jìn)submit continue和endsubmit之間即可在SCL中調(diào)用SAS宏,以實(shí)現(xiàn)SCL功能的拓展。(宏里面type如選擇word可輸出RTF格式的結(jié)果)。

圖2 盲態(tài)核查結(jié)果顯示(節(jié)選)
目前已有學(xué)者發(fā)表過臨床試驗(yàn)盲態(tài)核查的操作過程與常用的SAS宏程序等文章,研究表明盲態(tài)核查工作量大,通過SAS宏程序可提高工作質(zhì)量和效率[1,6]。本文提出的按照變量類型開展盲態(tài)核查的方法與既往報(bào)道的研究思路不同。本文不僅限于介紹SAS宏程序的應(yīng)用,還注重SAS與excel結(jié)合實(shí)現(xiàn)盲態(tài)核查結(jié)果自動(dòng)化、批量輸出以及SAS/AF模塊與SAS宏結(jié)合實(shí)現(xiàn)可視化呈現(xiàn)的效果,從而在保證核查規(guī)范和提高核查效率的前提下,降低SAS使用門檻。對(duì)于不熟悉SAS編程或者希望較快進(jìn)行核查的實(shí)際工作者,可通過界面引導(dǎo)快捷方便地使用本軟件,由此可見該軟件具有實(shí)際應(yīng)用價(jià)值。
在SAS/AF模塊顯示出其在SAS中的各種優(yōu)勢(shì)之后,目前國(guó)內(nèi)對(duì)其研究依舊較少。可能的原因是它仍存在著畫面不夠優(yōu)美等瑕疵使得人們更喜歡用VB或者java等軟件制作界面。不過對(duì)于進(jìn)行臨床試驗(yàn)的統(tǒng)計(jì)工作人員而言,實(shí)用較美觀更為重要,因此SAS/AF模塊更值得推崇。一是它與SAS宏程序是無縫連接,軟件出現(xiàn)故障(BUG)的概率小;二是它屬于SAS組件,因此對(duì)了解SAS者,相較于學(xué)習(xí)一種新的編程語言,SAS/AF的學(xué)習(xí)時(shí)間更短、更容易掌握。
中國(guó)衛(wèi)生統(tǒng)計(jì)2018年4期