SAS learning_4: 統計報表製作(1)——PROC TABULATE

一. 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,期待~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章