官术网_书友最值得收藏!

1.2 SAS用法簡介

1.2.1 初學者學習SAS的快捷方式

在1.1節中,在介紹SAS程序結構和常用SAS語句時已順便介紹了如何用編程法使用SAS。由此可見,使用SAS并不是一件非常困難的事。難就難在SAS語言(包括SAS語句、SAS函數、SAS過程、SAS高級編程技術)內容很多,需要花很多時間去學習和實踐。

筆者給初學者提供一種學習SAS快速入門的方法,即調用他人編制好的SAS程序,只要解決了“對號入座”問題(即每個程序是干什么的),用自己的數據替換掉已有的SAS程序中的數據,將程序發送給SAS系統去執行,就可獲得自己所需要的計算結果。每次結合他人的SAS程序和程序語句的講解,一次學一點,不需多長時間,自己就慢慢掌握了很多常用的SAS語言,也就是說,邊學邊解決實際問題,不僅不會望而生畏,而且見效很快。

當數據少時,直接將數據寫在程序中即可。但是,當數據量很大時,這樣做就不夠方便了,尤其遇到第3方格式數據時,SAS是不能直接讀取的。如何用SAS進行實驗設計、進行資料表達等內容,雖然很簡單,但卻是必須了解的內容。下面就這些基本內容做一扼要介紹。

1.2.2 實際運行SAS

什么叫實際運行SAS?若擬采用非編程法運行SAS,只需根據SAS說明書中所交代的步驟去“選擇菜單(參見本書配套光盤中相應內容)”就能獲得所需要的結果,這是第1種實際運行SAS的方法。第2種實際運行SAS的方法為:在SAS程序編輯器中輸入一段正確的SAS程序,如將本章1.1節介紹的SAS程序發送給SAS系統執行,就稱為實際運行SAS,會產生如下的輸出結果:

這是對輸入的原始數據的詳細描述,每個格內第1行為觀察的頻數;第2行為百分比,即以每個格上的頻數為分子,以總頻數為分母計算得到的相對數;第3行為行百分比;第4行為列百分比。

這是用4種方法分析四格表資料所得到的結果,第1種為一般χ2檢驗,χ2=1.7174,P=0.1900;第2種為似然比χ2檢驗,χ2=1.7497,P=0.1859;其他從略。

最后3行為度量列聯表中行變量與列變量間關聯性強弱的系數,其絕對值越接近于1,表明關聯越密切。因未對其進行假設檢驗,故無太大參考價值。

以上是采用Fisher精確法分析四格表資料所得到的結果。

統計和專業結論:因χ2=1.7174,P=0.1900,故說明2個工廠該產品的次品率之間的差別無統計學意義。雖然乙廠的次品數是甲廠次品數的2倍,但2個次品率(即P=5/254=1.97%與P=10/254=3.94%)之間的差別無統計學意義。說明2個工廠此種零件的次品率接近相等,即質量水平相當。

1.2.3 從實驗設計角度談SAS用法

與實驗設計有關的內容可大致分為3類:一是進行隨機化(SAS中有PLAN過程等);二是估計樣本含量和檢驗效能(SAS中有POWER過程和GLMPOWER過程等);三是給出實驗設計方案(具體地說,就是與特定設計類型對應的可用于安排實驗的設計表格,SAS中有多個過程可用于此目的)。以上內容都可以通過非編程法和編程法來實現,具體做法參見本書有關章節和配套光盤。

1.2.4 從資料錄入角度談SAS用法

1.按數據庫格式錄入統計資料

人們收集的科研資料往往錯綜復雜,但絕大部分統計資料都可表達成表1-1的形式,它常被稱為“數據庫格式”的復合型統計資料。這種呈現資料的方式把每個變量在每個個體身上的具體取值都清楚地展示出來了,可以說是比較準確的原始資料。可以根據研究者提出的不同分析目的,從中提取不同的變量或觀測進行特定的統計表達與描述和統計分析。

表1-1 冠心病人與正常人多項指標的觀測結果

【例1-2】有人對103例冠心病患者(G=1)和100例正常對照者(G=2)進行了多項指標的觀測,資料如表1-1所示。請問:如何在SAS系統中錄入這些資料,以便于采用SAS軟件對數據進行各種統計表達與描述或進行各種統計分析?

【分析與解答】若這些數據是寫在紙上的,只能在SAS軟件的編輯窗口內一行一行地輸入數據。每行代表一位受試者的全部信息(在SAS中,稱其為一個觀測),通常,同一行上的數據之間用空格符隔開;每一列代表一個變量在不同受試者身上的具體取值,變量的含義很廣,它可以代表第1列的序號、可以代表第2列的組別,…,可以代表最后一列的合并用藥情況。變量代表的內容可以是輔助信息,可以是分組標志或影響因素,可以是定量或定性的觀測結果。

(1)若在SAS程序編輯窗口內輸入的僅僅是數據(包括字符型數據),將其以文本格式存入外部媒介(硬盤、優盤或軟盤)上,就稱為“數據文件”。這種格式的數據文件可以在SAS窗口編寫SAS程序實現調用,調用的關鍵SAS語句是INFILE語句和INPUT語句。

例如,在SAS程序編輯窗口中輸入例1-1的數據,形式如下:

        1    1    5
        1    2   249
        2    1   10
        2    2   244

說明:第1列代表工廠編號,“1”代表甲廠、“2”代表乙廠;第2列代表產品檢查結果,“1”代表次品、“2”代表正品;第3列代表各條件下的樣品數。按下面的方法可將此數據存儲在D盤SASTJFX文件夾內,形成數據文件,假定數據文件名為PRODUCT.DAT。

在SAS程序編輯窗口左上角:文件(FILE)→Save As(另存為)→在彈出的“另存為”窗口內左上角尋找并確定路徑:D/SASTJFX→在此窗口下方倒數第2行的文件名命令盒內輸入數據文件名:PRODUCT→在此窗口倒數第1行的文件類型命令盒中選擇“.DAT”作為文件的擴展名→單擊“保存(或確定)”按鈕。

如何將數據文件讀入程序編輯窗口,進行四格表資料的各種統計分析呢?在SASTJFX1_1.SAS程序中,只需將數據修改成如下的形式,而過程步不需改動:

        DATA rate;
            INFILE 'D:\SASTJFX\product.dat';  INPUT a  b  f;
        ODS HTML;
        PROC FREQ DATA=rate; WEIGHT f; TABLES a*b / CHISQ; RUN;
        ODS HTML CLOSE;

將這段SAS程序發送給SAS系統執行,可達到同樣的效果。這種使用SAS的方法適合數據量很大的場合。

(2)若在SAS程序編輯窗口內輸入數據時,第1行輸入了變量名,從第2行開始是變量的具體取值,也將其存成數據文件,這是錯誤的數據文件,不能用前述的方法被SAS系統直接調用,只能在日后給用戶提個醒,每列數據的變量名是什么,若變量名寫得比較科學,其含義一看便知,則對理解這些數據能起到“備忘錄”的作用,否則,沒有任何價值!

(3)若從SAS窗口通過“工具→表編輯器”方式進入表編輯器窗口,在此窗口內直接輸入數據,窗口第1行帶有變量名(用戶可修改變量名),然后,將數據存入外部設備或計算機緩存區,就成為能被SAS系統直接調用的SAS數據集了。存入SAS系統自動創建的邏輯庫WORK中的數據集稱為臨時SAS數據集,存入其他位置的SAS數據集稱為永久SAS數據集。

2.按實驗設計類型錄入統計資料

人們收集完數據后,有時,習慣將它們分類整理成一張統計表,統計表的分組標志通常是定性變量,而結果變量通常是定量的。對于這樣的數據,當屬于單因素設計定量資料時,常需進行t檢驗、單因素設計定量資料的方差分析或秩和檢驗;當屬于某種多因素設計定量資料時,常需進行相應設計定量資料的方差分析。請看下面的例子。

【例1-3】某實驗同時涉及A、B、C 3個地位平等的實驗因素,A分為2個水平、B分為3個水平、C分為4個水平,觀測指標為OD值,受試對象為樣品,在不同實驗條件下均獨立地重復做了2個樣品,資料如表1-2所示。請在SAS編輯窗口輸入此表中的主要變量和相應的數據,以便能進行相應設計定量資料的方差分析。

表1-2 3個實驗因素作用下OD值的測定結果

【分析與解答】如果采取上例的方法輸入數據,需要在每個定量數據前輸入4個變量的水平代碼。例如,對于第一個數據0.39,應當輸入如下信息:1 1 1 1 0.39,這4個1分別代表因素A、B、C和重復實驗次序都取1水平;同理,對于第2個數據0.41,應當輸入如下信息:1 1 1 2 0.41,…,對于最后一個數據0.37,應當輸入如下信息:2 3 4 2 0.37,這4個數分別代表因素A取2水平、因素B取3水平、因素C取4水平,而重復實驗次序為第2次。顯然,這樣做太麻煩了,而且,很容易出錯。簡便的做法是,用SAS語言中的DO-END循環語句來自動產生因素A、B、C和重復實驗次序的水平,其數據步如下,設SAS程序名為SASTJFX1_3.SAS。

        data doxunhuan;
          do A=1 to 2; do B=1 to 3; do C=1 to 4; do cixu=1 to 2;
              input OD @@; output;
          end; end; end; end;
        cards;
        0.39 0.41 0.37 0.39 0.42 0.38 0.44 0.41
        0.37 0.36 0.43 0.45 0.41 0.37 0.42 0.39
        0.45 0.43 0.46 0.39 0.38 0.35 0.39 0.37
        0.36 0.41 0.45 0.36 0.41 0.45 0.41 0.46
        0.42 0.37 0.38 0.41 0.38 0.36 0.43 0.38
        0.37 0.43 0.36 0.39 0.43 0.42 0.35 0.37
        ;
        run;

程序說明:最外層的DO-END循環控制表中橫向上水平變化最慢的變量(因素A),第2層DO-END循環控制表中橫向上水平變化較快的變量(因素B),這兩個變量已將全部6行打上A與B的水平標記,即前3行A均標記為1、后3行A均標記為2;而B的標記從上到下分別為1、2、3、1、2、3。每行有8個數據,先按因素C分為4組,其標記分別為1、2、3、4,每組內再按次序(cixu)分為標記1、2。其效果是所形成的SAS數據集中的排列順序與前面用“笨方法”產生的結果一致,即(因篇幅太大,中間部分省略了):

3.按列聯表類型錄入統計資料

與前面的定量資料類似,人們在表達多因素影響下的定性資料時,習慣上將數據整理成列聯表的形式,特別是高維列聯表資料,很少用“數據庫”的形式呈現資料,見下面的例子。

【例1-4】某臨床醫生收集到如表1-3所示的資料,請在SAS編輯窗口輸入此表中的主要變量和相應的數據,以便能進行相應設計定性資料的統計分析。

表1-3 甲、乙兩種治療方法對不同病程和不同病情的患者的治療效果

注:這個例子是假設的

【分析與解答】與前例相同,輸入數據的方法也有兩種:第1種是在每個頻數前需要提供4個變量的標記,它們分別是治療方法(treatment)、病程(time)、病情(degree)、療效(effect)。這是很麻煩的事!用DO-END循環語句就可方便地實現上述目標,其SAS數據步如下,設SAS程序名為SASTJFX1_4.SAS。

        data doxunhuan;
            do treatment='JIA','YI'; do time='short','long';
                  do degree='light','weight';
                      do effect='zhiyu','xianxiao','haozhuan','wuxiao';
                        input number @@; output;
            end; end; end; end;
        cards;
        50 46 37 12
        42 35 32 23
        37 30 28 14
        31 24 25 38
        45 49 44 16
        38 43 39 22
        29 38 34 19
        22 33 30 28
        ;
        run;

程序說明:最外層的DO-END循環控制表中橫向上水平變化最慢的變量(治療方法treatment),第2層DO-END循環控制表中橫向上水平變化較快的變量(病程time),第3層DO-END循環控制表中橫向上水平變化最快的變量(病情degree),這3個變量已將全部8行打上treatment(治療方法)、time(病程)、degree(病情)的水平標記,即前4行treatment均標記為JIA(甲),后4行treatment均標記為YI(乙);time的標記從上到下分別為short(短)、short(短)、long(長)、long(長)、short(短)、short(短)、long(長)、long(長);而degree的標記從上到下依次是light(輕)、weight(重)交替出現;每行上的4列是effect(療效)的水平標記,依次是zhiyu(治愈)、xianxiao(顯效)、haozhuan(好轉)、wuxiao(無效),INPUT語句中的number讀取各行上的頻數。形成的SAS數據集的樣式與前例相似,此處從略。

1.2.5 從不同格式數據轉換角度談SAS用法

1.由非統計軟件創建的數據文件與SAS數據集之間的互相轉換

若待分析的數據已采用某些第3方非統計軟件(如Excel軟件等)創建了不同格式的數據文件,其中有些可用SAS系統提供的導入數據接口方便地轉換為SAS數據集(利用導出數據接口可以實現相反的操作)。請看下面的例子。

【例1-5】設有一個用Excel軟件創建的數據文件zhanghongleidata1.xls,該文件中有2列數據,第1列變量名為A,第2列變量為B,A、B的具體取值分別是計算機導航輔助方法與CT方法測定每一位骨病患者置入頸椎椎弓根螺釘的相對角度的數據。共有140對數據,假定它們測自140位患者,試將其轉換為SAS數據集。

【分析與解答】假定用Excel軟件創建的數據文件zhanghongleidata1.xls存放在D:\SASTJFX內,則通過如下步驟,可將其轉換為臨時SAS數據集。

(1)進入SAS系統→文件→導入數據→在窗口右邊彈出一個含有命令盒的窗口。

在命令盒中顯示可導入的數據文件類型為:97、2000或2002年版的Excel軟件產生的數據文件,用戶可通過此命令盒最右邊的三角調整擬導入的數據文件的格式。

(2)單擊窗口下邊的“Next”按鈕→彈出一個小窗口,要求通過瀏覽方式確定擬導入的Excel文件的路徑和文件名→選中D:\SASTJFX\zhanghongleidata1.xls→單擊“OK”按鈕。

(3)系統詢問要導入的Excel文件是表幾(自動顯示表1,即sheet1$。若不是表1,可重新選擇)→單擊“Next”按鈕。

(4)彈出一個新窗口,有兩個命令盒,上行為邏輯庫名(自動顯示臨時庫名WORK,也可改變),下行為擬創建的數據集名→輸入dao_hang_and_CT_data→單擊“Finish”按鈕。

(5)在窗口左邊邏輯庫中WORK庫內就有剛創建的SAS數據集。

(6)用鼠標左鍵雙擊此數據集,可顯示此數據集的內容。

將Excel文件顯示的界面與已轉換后得到的SAS數據集做一個直觀比較。

不難發現:變量名被SAS系統修改了,A、B分別被改為F1和F2;Excel文件中的第一行數據被SAS系統“吃掉了”!造成這種不良后果的主要原因是在將Excel文件轉換成SAS數據集的最后一步未取消系統中一個隱含的“設置”,在上面導入數據的第2步之后,會彈出一個窗口。其內的命令盒里有“Sheet1$”。在“Sheet1$”之下有一個“Options”按鈕,單擊此按鈕會彈出另一個窗口。

在此窗口上的第1行處于被選中的狀態,即使用Excel文件中的第1行作為SAS數據集中的變量名。若用戶在Excel文件中第1行輸入的是數據不是變量名,則應將第1行中復選框內的“√”去掉。去掉后單擊右邊的“OK”按鈕,接下來的操作步驟與上面的第(4)步到第(6)步相同,可獲得正確的轉換結果。

本例還可以通過在SAS編程窗口運行下面的一段SAS程序,實現將Excel文件轉成SAS數據集的目的。設程序名為SASTJFX1_5.SAS。

        PROC IMPORT OUT=WORK.ZHANGHONGLEI DBMS=EXCEL REPLACE
                  DATAFILE="D:\SASTJFX\zhanghongleidata1.xls";
            SHEET="Sheet1$";  GETNAMES=YES;  RUN;

值得注意的是,本例Excel文件中第1行不是變量名而是數據,所以上面程序中倒數第2句應改為“GETNAMES=NO”;若要轉換的數據在Excel文件的第3張表單中,則上面的程序倒數第3句應改為“SHEET="Sheet3$"”。若轉換成功,則新產生的臨時SAS數據集ZHANGHONGLEI存放在SAS/WORK庫中,可通過SAS資源管理器找到此庫,雙擊此庫中的SAS數據集名,便可將其打開,也可在編程窗口直接調用這個臨時SAS數據集。

2.用SAS系統讀入其他版本或分析軟件創建的數據集

若待分析的數據已采用第3方統計軟件(如SPSS、BMDP等統計軟件包)創建了不同格式的數據集,則需要通過使用libname語句和在SAS中內置的轉換程序(稱為讀取特定格式數據的庫引擎)將特定的數據文件轉換為SAS數據集。這種方式使用起來不很方便,下面介紹如何利用SPSS軟件提供的文件存儲功能將SPSS數據集轉換成SAS數據集。

如果用戶正在使用的計算機上正確地安裝了SPSS軟件,直接用鼠標左鍵雙擊SPSS數據文件進入SPSS系統并打開該文件,選擇“另存為”,在彈出的存儲文件的窗口內選擇合適的“保存類型”并輸入擬創建的SAS數據集名,確定后,就得到轉換后的SAS數據集。

1.2.6 從資料表達角度談SAS用法

SAS中有些過程給出的結果并不太理想,如用FREQ過程生成定量資料的頻數分布表,只要兩個數據不完全相等,就形成兩個分組標志,這樣形成的頻數分布表很長,顯得過細,沒有實用價值。實際上,可以在使用FREQ過程的基礎上配合使用FORMAT過程,生成比較有實用價值的頻數分布表;還可按用戶的需要去選定第一組的組段下限、組距、組數等要求,利用豐富的SAS語言編程,產生用戶自己量身訂制的頻數分布表。

1.2.7 從統計分析角度談SAS用法

若用戶需要進行的統計分析在SAS軟件中已有相應的過程(例如,對于單因素兩水平設計定量資料t檢驗,有TTEST過程;對于兩因素析因設計定量資料一元方差分析,有ANOVA過程和GLM過程等;對于列聯表資料的分析,有FREQ過程和CATMOD過程等),直接調用SAS過程實現統計分析就比較簡單了。然而,對于某些計算問題,SAS中尚無現成的SAS過程,此時,可以利用SAS語言并按已知的計算公式或算法編寫SAS程序,從而實現統計分析。

總之,要想利用SAS解決自己的各種問題,除了要會調用SAS中的全部過程外,還應該全面掌握SAS語言。運用SAS語言,可以編寫出當前已有但SAS過程解決得不滿意的問題或尚解決不了的一些問題。如果用戶使用某種其他編程語言(如C語言、C++語言或Java語言),需要寫大量的代碼來設置環境、構造窗口等;而用SAS語言,只需把精力放在要解決的具體問題上,編程工作量就小多了。此時,用戶不難體會到,SAS的用途的確很廣。

主站蜘蛛池模板: 盘锦市| 东莞市| 朝阳县| 荔波县| 文化| 镇赉县| 井冈山市| 临海市| 阿图什市| 大厂| 岳西县| 原平市| 荥经县| 九龙坡区| 平塘县| 凌海市| 永德县| 疏勒县| 富蕴县| 阿克陶县| 南昌县| 福海县| 佳木斯市| 扶余县| 安国市| 舒兰市| 敦化市| 萨嘎县| 喀喇沁旗| 重庆市| 健康| 山东省| 鄂州市| 阿坝县| 凌源市| 孝义市| 九台市| 宽甸| 龙游县| 南汇区| 黔江区|