SAS learning_5: 統計報表製作(2)——PROC REPORT

二. PROC REPORT

1. 基本形式:

PROC REPORT NOWINDOWS;
	COLUMN variable-list;
RUN;

如果不寫NOWINDOWS,SAS會打開交互性REPORT窗口;
COLUMN命令:告訴SAS哪些變量以什麼順序被包含。(類似於PROC PRINT 的VAR 命令),如果不寫這個命令,SAS會默認把數據集中所有變量納入。
如果COLUMN命令中至少有一個分類變量,結果會輸出每行一個觀測的表格;如果COLUMN命令中全部都是數值變量,SAS默認會把這些變量進行加和,輸出加和結果。

實例:

PROC REPORT DATA = Sashelp.Bweight NOWD;
	COLUMN married boy black weight;
RUN;

結果見下:
在這裏插入圖片描述
因爲列出的4個變量都屬於數值型變量,因此SAS默認將他們進行了求和操作;

2. DEFINE命令

DEFINE命令是PROC REPORT 中的基本命令,其基本形式爲:

DEFINE var-name / options 'column-header';

實例,查看不同性別,種族和婚姻狀態下的嬰兒出生體重綜合。代碼如下:

PROC REPORT DATA = Sashelp.Bweight NOWD;
	COLUMN boy married black weight;
	DEFINE boy / GROUP 'Gender/0=female';
	DEFINE married / GROUP 'married/0=unmarried';
	DEFINE black / GROUP 'Racial/1=black racial';
	DEFINE weight / ANALYSIS 'Sum of/Infant birth weight';
RUN;

其中
1)對變量weight的定義行可以省略,因爲weight爲連續變量,SAS默認會對其進行加和操作;
2)GROUP聲明以下的操作按照組別變量的不同取值分別進行(求和)
3)變量表頭中的 / 起到了回車的作用

結果如下:
在這裏插入圖片描述
在DEFINE的options當中,其中兩個很重要的就是GROUP和ACROSS選項,GROUP產生行分組,而ACROSS產生列分組。
1)對於GROUP,簡單地在DEFINE中聲明即可;

DEFINE var / GROUP 'var-header';

2)對於ACROSS, 默認情況下它產生的單元格是計數結果,而非加和結果。要想得到ACROSS variable的加和結果,必須告訴SAS要對哪個變量進行加和。
下面的例子,對boy變量進行ACROSS聲明,代碼見下:

PROC REPORT DATA = Sashelp.Bweight NOWD;
	COLUMN married black boy, weight;
	DEFINE boy / ACROSS 'Gender/0=female';
	DEFINE married / GROUP 'married/0=unmarried';
	DEFINE black / GROUP 'Racial/1=black racial';
RUN;

其中
1)將boy變量定義爲ACROSS變量(DEFINE boy / ACROSS), married和black定義爲行分組變量(GROUP)
2)COLUMN命令中,boy, weight表明:以逗號左邊的ACROSS變量爲準,對逗號右邊的數值變量weight進行加和報告。
結果如下:
在這裏插入圖片描述

3. BREAK和RBREAK

BREAK的用法和PROC TABULATE中的ALL用法類似,用於在指定變量每一個變量值/之都生成一個BREAK(具體內容由option指定)。
RBREAK的用法稍有不同,RBREAK不指定變量,因爲RBREAK在整個PROC REPORT過程中只生成一次(除非你指定了BY-group變量,此時RBREAK將在by-group變量的每一個變量值前/後都生成一個break【變得和BREAK相似了,但作用範圍是不同的】)

基本形式爲:

BREAK location variable / options;
RBREAK location / options;

其中
1)location可以爲BEFORE 或者 AFTER,指示BREAK插入的位置;
2)variable指定BREAK的變量;
3)options: 常用的有PAGE(開始新的一頁)以及SUMMARIZE(獲得加和值:小計)

示例:在上面例子的基礎上,想以婚姻狀態爲分組,獲得每個婚姻狀態的出生體重綜合“小計”,並在報告的最後獲得“總計”。代碼如下:

PROC REPORT DATA = Sashelp.Bweight NOWD;
	COLUMN married black boy, weight;
	DEFINE boy / ACROSS 'Gender/0=female';
	DEFINE married / GROUP 'married/0=unmarried';
	DEFINE black / GROUP 'Racial/1=black racial';
	BREAK AFTER married / SUMMARIZE;
	RBREAK AFTER / SUMMARIZE;
RUN;

結果如下:
在這裏插入圖片描述

4. 在PROC REPORT 中添加描述性統計量

與PROC TABULATE相似,PROC REPORT也可以輸出相同的描述性統計量(見上一篇文章SAS learning_4: 統計報表製作(1)——PROC TABULATE)。但與TABULATE不同的是,REPORT中變量與keywords的連接符號不是星號(*),而是逗號(,)。

基本形式:

COLUMN var, keywords N;

衆多描述性統計量中,N較爲特殊,它不需要用逗號與任何變量連接,直接列在變量之間即可,表示對於輸出的每一行報告,輸出對應的觀測數。

對於複雜的組合,以括號括起來:

COLUMN (var1 var2), keyword1  var3,(keyword2, keyword3) ;

示例:

PROC REPORT DATA = Sashelp.Bweight NOWD;
	COLUMN married black N boy, weight,MEAN;
	DEFINE boy / ACROSS 'Gender/0=female';
	DEFINE married / GROUP 'married/0=unmarried';
	DEFINE black / GROUP 'Racial/1=black racial';
RUN;

注意,boy,weight表示boy爲交叉變量,weight,MEAN表示生成weight的均數統計量。
結果如下:
注意區分交叉變量與描述性統計量keyword
小技巧:N放在group變量後邊,表格編排會更好看~

5. 在PROC REPORT 中新建計算變量

計算新的變量需要在COMPUTE-ENDCOMP中進行,可以在其中進行基本運算,IF-THEN判斷和DO循環。計算得到的變量可以在DEFINE中聲明,也可以不聲明。但聲明時,需要用/COMPUTED加以註釋。
基本形式:

DEFINE new-variable-name / COMPUTED;
COMPUTE new-variable-name / options;
	programming statements;
ENDCOMP;

1)計算連續變量:比較簡單,需要注意一點:當使用變量的描述統計量進行計算時,要求這個統計量必須在COLUMN中有過聲明(即:在報告表格中有這一列出現。eg:COLUMN中有age.MEAN,但沒有age.SUM, 在計算時就不能使用age.SUM, 只能使用age.MEAN)

DEFINE var3 /COMPUTED;
COMPUTE var3;
	var3 = var1.mean + var2.sum;
ENDCOMP;

2)計算字符變量:需要在變量名後增加 /CHAR選項,還可以指定LENGTH = 字符長度;

DEFINE var3 /COMPUTED;
COMPUTE var3 / CHAR LENGTH = 3;
	IF var1 = 'yes' then var3 = 'no';
	ELSE var3 = 'not clear';
ENDCOMP;

示例:

PROC REPORT DATA = Sashelp.Bweight NOWD;
	COLUMN married  N (weight momwtgain),mean weightratio healthygain;
	DEFINE married / GROUP 'married/0=unmarried';
	DEFINE weightratio / COMPUTED 'MOMweightGain/infantweight';
	DEFINE healthygain / COMPUTED;
	COMPUTE weightratio;
		weightratio = weight.mean/momwtgain.mean;
	ENDCOMP;
	COMPUTE healthygain / CHAR LENGTH= 3;
		IF momwtgain.MEAN GE 5 THEN healthygain = 'no';
		ELSE IF momwtgain.MEAN LT 5 THEN healthygain = 'yes';
	ENDCOMP;
RUN;

結果如下:
在這裏插入圖片描述

至此,PROC REPORT的學習筆記到此結束,其功能遠遠不止這些,深知自己還有很多地方需要去學習。之後會不定時根據自己新學到的細節加以補充。

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