楊璐+郁可沁+齊進+魏永越+趙楊+于浩+陳峰+張汝陽
摘要:《SAS軟件高級編程》是生物統(tǒng)計學(xué)本科生的一門必修專業(yè)技能課程。該課程難度系數(shù)較大,且不易掌握編程的精髓。筆者就課程學(xué)習(xí)總結(jié)個人心得,給出編程方法、編程策略、查詢工具和訓(xùn)練方式四點體會和建議。
關(guān)鍵詞:生物統(tǒng)計學(xué);本科生;SAS軟件高級編程;學(xué)習(xí)心得
中圖分類號:G642.0 文獻標(biāo)志碼:A 文章編號:1674-9324(2017)52-0185-02
南京醫(yī)科大學(xué)每年面向全國招收30名左右生物統(tǒng)計學(xué)專業(yè)本科生,四年制,授予理學(xué)學(xué)士學(xué)位。該專業(yè)的人才培養(yǎng)目標(biāo)是“培養(yǎng)適應(yīng)我國社會經(jīng)濟發(fā)展要求的生物統(tǒng)計學(xué)專業(yè)技術(shù)人才,具有深厚的人文底蘊、嚴謹?shù)目茖W(xué)精神、強烈的創(chuàng)新意識、較高的政治素養(yǎng)和高度的社會責(zé)任感,同時具有一定的基礎(chǔ)醫(yī)學(xué)、臨床醫(yī)學(xué)基本知識,掌握現(xiàn)代統(tǒng)計學(xué)基本理論、基本方法,具有獲取信息、數(shù)據(jù)管理、數(shù)據(jù)分析和結(jié)果表達的能力,熟練掌握數(shù)據(jù)管理軟件和統(tǒng)計學(xué)分析軟件,能夠從事衛(wèi)生統(tǒng)計、醫(yī)學(xué)統(tǒng)計、生物統(tǒng)計、數(shù)據(jù)管理等工作,為醫(yī)學(xué)、生物學(xué)科學(xué)研究、衛(wèi)生決策提供咨詢服務(wù)的復(fù)合型拔尖創(chuàng)新人才和應(yīng)用人才”[1]。
根據(jù)專業(yè)課程設(shè)置,本科生在第3學(xué)年的第1學(xué)期需要學(xué)習(xí)《SAS軟件高級編程》課程。該課程是《SAS應(yīng)用基礎(chǔ)》的進階課程,共72學(xué)時,旨在培養(yǎng)本科生的編程思維,傳授編程技巧,提高數(shù)據(jù)管理和分析的專業(yè)技能,達到“技術(shù)高、速度快、失誤少”的業(yè)務(wù)水平,滿足生物醫(yī)學(xué)領(lǐng)域?qū)I(yè)人才的需求。
SAS軟件是一個模塊化、集成化的大型應(yīng)用軟件系統(tǒng),在國際上已被譽為統(tǒng)計分析的標(biāo)準(zhǔn)軟件,廣泛應(yīng)用于各個領(lǐng)域。《SAS軟件高級編程》是一門難度系數(shù)較高的課程。在學(xué)習(xí)過程中,有人才短思澀,百思不得其解;有人文思敏捷,編程行云流水。筆者根據(jù)自身學(xué)習(xí)經(jīng)驗和操作體會,現(xiàn)將該課程的學(xué)習(xí)心得總結(jié)如下。
一、最好的編程方法:尋找規(guī)律
SAS宏程序最核心的功能是讓電腦自動完成大量“重復(fù)性”的工作,以解放人的雙手。宏程序中起作用的關(guān)鍵語句便是循環(huán)體。借助循環(huán)體中的循環(huán)、條件判斷、跳轉(zhuǎn)、中止語句可以實現(xiàn)所謂的“自動化”。因此,程序員要仔細揣摩期望實現(xiàn)的事情,尋找其中的規(guī)律。只要有規(guī)律,就可以通過程序?qū)崿F(xiàn)。
例如:如何以最快的方式從1—1024之間找到目標(biāo)值704?我們可以利用“二分法”思想檢索目標(biāo)值。其思路如圖1所示:第1、2步先判斷上下限是否為目標(biāo)值。結(jié)果為“否”,第3步計算上下限均值512。因512<704,則將范圍更新為512—1024,第4步計算新的上下限均值768。因768>704,則將范圍更新為512—768,第5步計算新的上下限均值640。因640<704,則將范圍更新為640—768,第6步計算新的上下限均值704。因704為目標(biāo)值,檢索中止。
從二分法的思路可以看出一個規(guī)律:通過不斷比較當(dāng)前上下限均值與目標(biāo)值的大小,更新上限或者下限,以縮小檢索范圍。按照此規(guī)律,我們可以設(shè)計以下SAS宏程序,其思路是:(1)設(shè)定上限、下限宏變量分別是L和U,初始值分別是L=1,U=1024。先判定L、U是否是704。如是,程序中止;否則,進入下一步循環(huán)。(2)計算一個當(dāng)前上下限的中間值M=(L+U)/2。若M<704,則將新的下限L設(shè)定為M;若M>704,則將新的上限U設(shè)定為M。(3)若M等于704,則中止循環(huán),否則,重復(fù)第(2)步驟。 二、最好的編程策略:分而治之、逐個擊破
實際工作中,程序員面臨的問題往往比較復(fù)雜。一般情況下不太可能用一個特別冗長的程序解決所有的問題。程序過長不僅會給閱讀和調(diào)試增加難度,后期維護和更新也不太方便。筆者推薦采用“分而治之、逐個擊破”的思路對復(fù)雜任務(wù)進行分解。換言之,撰寫多個擁有特定功能的小型宏程序,然后再將其“組裝”起來,形成一個功能復(fù)雜的大型宏程序。
例如:撰寫一個宏程序用于分類資料的描述與比較(圖2)。筆者所撰寫的宏實則調(diào)用了5個子宏。這5個子宏分別行使以下功能:(1)對分類資料進行頻數(shù)統(tǒng)計,給出R×C的列聯(lián)表。(2)若數(shù)據(jù)集中的行變量、列變量取值水平比用戶指定的取值少,則在列聯(lián)表中自動補齊。(3)指定行(列)百分比存放的位置,頻數(shù)右側(cè)一列,頻數(shù)下方一行或與頻數(shù)同一單元格。(4)按用戶指定的行變量、列變量取值水平展示列聯(lián)表。(5)按指定的統(tǒng)計學(xué)方法進行假設(shè)檢驗。
三、最好的查詢工具:幫助文件或者搜索引擎
SAS軟件涉及非常多的過程、語句、選項、函數(shù)等。程序員不太可能完全記住所有的內(nèi)容。筆者認為這并不影響你成為一個優(yōu)秀的程序員。因為,我們在任何時候都可以進行查詢。SAS軟件以結(jié)構(gòu)樹的形式給出了極為詳細的幫助文件。用戶可以檢索關(guān)鍵詞的形式,在幫助文件中查詢?nèi)魏嗡枰男畔?。幫助文件不僅有原理和語法介紹,甚至還給出了具體的例子,特別容易理解。
此外,當(dāng)問題較為特殊時,程序員可以借助搜索引擎從網(wǎng)絡(luò)上獲取幫助。筆者一直堅信“自己所碰到的問題一定是別人同樣碰到過且已經(jīng)解決的問題”。你會驚訝地發(fā)現(xiàn)多數(shù)情況下,已經(jīng)有熱心的網(wǎng)友給出了問題的答案。若實在未能找到現(xiàn)成的答案,筆者建議用戶可以在論壇中在線求助,例如“經(jīng)管之家”(http://bbs.pinggu.org/)。
四、最好的訓(xùn)練方式:勤實踐、多思考
熟悉并精通一門統(tǒng)計軟件或者編程語言是每一個統(tǒng)計學(xué)工作者必備的技能。筆者建議在實施某一具體項目中,不斷提高編程技能,而不是僅僅閱讀書籍、紙上談兵[2]。此外,實踐中需多加思考,盡可能用宏程序去“偷懶”,提高工作效率,以減輕自己本人的工作量。俗話說“熟能生巧”。宏程序?qū)懙米銐蚨嘁院螅欢〞μ囟▎栴}的處理形成編程的條件反射,達到“如魚得水”的境界。
因此,要以具體項目為導(dǎo)向,認真思考問題,尋找事件規(guī)律,分解編程任務(wù),培養(yǎng)專業(yè)的程序員思維;并且,平時反復(fù)實踐操作,靈活運用查詢工具,形成高效的編程條件反射,提高SAS軟件高級編程水平。當(dāng)然,這些僅僅是筆者學(xué)習(xí)的個人心得,并非具有通用性,還需要考慮個體差異,因人而異,量體裁衣,尋找最合適自己的途徑。
參考文獻:
[1]趙麗萍,趙楊,于浩,胡志斌,陳峰.生物統(tǒng)計學(xué)本科專業(yè)人才培養(yǎng)方案的設(shè)置與思考[J].中國衛(wèi)生統(tǒng)計,2015,32(2):364-365.
[2]魏永越,趙楊,柏建嶺,富春楓,于浩,陳峰.SAS ODS及RTF標(biāo)記語言在臨床試驗規(guī)范化統(tǒng)計報表輸出中的應(yīng)用[J].中國衛(wèi)生統(tǒng)計,2010,27(4):428-430.