一. PROC TABULATE
1.基本形式:
PROC TABULATE;
CLASS classification-variable-list;
TABLE page-dimention, row-dimention, column-dimention;
RUN;
其中,我們用CLASS 聲明的變量,告訴SAS哪些變量是分類變量;
TABLE 聲明瞭3個維度,依次爲:頁維度,行維度,列維度;不同維度之間以“,”進行區隔;
需要注意的是:聲明一個維度,此時的維度爲列維度;聲明兩個維度,則爲行維度與列維度;
應用技巧:先定義行維度和列維度,達到滿意效果後再添加頁維度,可以增加機器效率;
例子:本次使用SASHELP.BWEIGHT(包含嬰兒出生體重與母親若干特徵)的數據集,查看不同種族,婚姻狀態以及嬰兒出生性別的新生兒數量;
PROC TABULATE DATA = Sashelp.Bweight;
CLASS Black Married Boy;*聲明分類變量;
TABLE Black, Married, Boy;*頁/行/列維度;
TITLE 'Number of baby by racial(black), married and gender';
RUN;
結果如下:
MISSING option
某些觀測,在CLASS中聲明的變量中有缺失,默認情況下SAS會忽略這些觀測,不把其算進統計過程中;在option選項中表明MISSING,可以把缺失設爲單獨一類加入表格的統計;
PROC TABULATE DATA = Sashelp.Bweight MISSING;
2. 在PROC TABULATE中增加描述性統計量
上面提到過,CLASS告訴了SAS哪些變量是分類變量;那麼肯定也有另一個聲明告訴SAS,哪些變量是連續變量。也就是VAR statement;
基本形式:
VAR numeric-var-list;
而且,TABLE中所有的變量,都需要來自CLASS 或 VAR 聲明中的變量;
TABLE 中的維度,也不僅僅只能寫變量,還可以包含很多keywords,以下爲幾個常用的keywords:
keywords | 功能 |
---|---|
ALL | 在一個新的頁/行/列中顯示總計值 |
MAX | 最大值 |
MIN | 最小值 |
MEAN | 均數 |
MEDIAN | 中位數 |
MODE | MODE |
N | 非缺失值的個數 |
NMISS | 缺失值的個數 |
PCTN | 個數在組中所佔的百分比 |
PCTSUM | 累計百分比 |
STDDEV | 標準差 |
SUM | 加和 |
知道這些keywords後,需要將其運用進語句中。這裏要提到在維度中的三個操作:串接;交叉和分組;
串接:以空格串接不同變量
TABLE Black Married Boy;
交叉:以*連接變量或keywords
TABLE MEAN * Black;
分組:以()將同組放入其中
TABLE SUM * (Black Boy);
例子:觀察不同性別,婚姻狀態的婦女所生嬰兒的出生體重均值,代碼如下
PROC TABULATE DATA = Sashelp.Bweight MISSING;
VAR Weight;
CLASS Married Boy Black;
TABLE Black Married, MEAN * Weight * (Boy ALL);
TITLE 'Mean Bithweight between boy, black and married';
RUN;
結果如下:
3. 細節處理:控制PROC TABULATE的輸出外觀
(1)FORMAT=option:控制表格中的輸出格式,如FORMAT = COMMA5.1;
PROC TABULATE DATA = Sashelp.Bweight FORMAT = COMMA7.1;
VAR Weight;
CLASS Married Boy Black;
TABLE Black Married, MEAN * Weight * (Boy ALL);
TITLE 'Mean Bithweight between boy, black and married';
RUN;
需要注意,COMMA格式表示生成帶有逗號區隔的數字,.1代表保留1位小數,7代表輸出的“位數”:3,411.2共佔位7個字符。如果位數不夠(如小於7),SAS會輸出不一樣的結果,感興趣的可以試試看,這裏不再贅述。
(2)BOX 和 MISSTEXT = options:空白格子填充,二者都在TABLE 命令後 以 / 做區隔進行聲明;
BOX=option可以把表格中空白的左上角填充以內容,如:
TABLE Black Married, MEAN * Weight * (Boy ALL) / BOX = 'Mean birthweight';
效果圖:
同理, MISSTEXT = option告訴SAS在空白的單元格內填充“說明”,如MISSTEXT = ‘None’;
(3) 更改表頭(包括變量名和變量值)
1)變量值:使用PROC FORMAT,此處不贅述;
2)變量名(指在CLASS命令中聲明的變量):
在變量名後直接註明。如:Married = ‘是否結婚’;若想刪除一個表頭,如Mean,只需Mean=’’ 即可。
但需要注意的是,當統計分析變量(MEAN SUM etc)等在行維度時,聲明MEAN=’'時,SAS會留下空白的單元格,不把其刪除。在這種情況下,需要在TABLE命令後聲明ROW=FLOAT(需要以 / 區隔),才能達到刪除表頭的目的。
PROC FORMAT;
VALUE marriedfmt 0 = '否'
1 = '是';
VALUE boyfmt 0 = '女孩'
1 = '男孩';
VALUE blackfmt 0 = '否'
1 = '是';
RUN;
PROC TABULATE DATA = Sashelp.Bweight FORMAT = COMMA7.1;
VAR Weight;
CLASS Married Boy Black;
TABLE Black='是否是黑人' Married='是否結婚', MEAN=''* Weight='嬰兒平均出生體重g' * (Boy='' ALL='合計')/ BOX = '特徵變量';
FORMAT Black blackfmt. Married marriedfmt. Boy boyfmt.;
TITLE 'Mean Bithweight between boy, black and married';
RUN;
本例中的統計變量MEAN處於列維度,因此不需要聲明**/ROW=FLOAT**命令;效果如下:
是不是清晰許多了?
(4)爲table cell設置不同格式;
基本形式:在變量名後增加*FORMAT=option;
本次我們在VAR命令中增加媽媽孕期體重增長變量(Momwtgain),並設置其爲保留2位小數;
代碼如下:
PROC TABULATE DATA = Sashelp.Bweight FORMAT = COMMA7.1;
VAR Weight Momwtgain;
CLASS Married Boy Black;
TABLE Black='是否是黑人' Married='是否結婚', MEAN=''* (Weight='嬰兒平均出生體重g'*FORMAT = COMMA7.1 Momwtgain='媽媽孕期平均體重增長'*FORMAT=6.2) * (Boy='' ALL='合計')/ BOX = '特徵變量';
FORMAT Black blackfmt. Married marriedfmt. Boy boyfmt.;
TITLE;
RUN;
結果如下:
至此,PROC TABULATE的筆記到此結束。自己依舊很懶惰,完成這篇筆記時已過很多時日。檢討中
後續將繼續統計報表的學習SAS learning_5: 統計報表製作(2)——PROC REPORT,期待~