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