您的位置:首页 > 其它

利用SAS软件制作报表的常用手法

2016-11-27 23:50 447 查看

                                                                 利用SAS软件制作报表的常用手法

1、先设计好你的报表格式

2、用SAS过程先初步得到这些结果

比如可以用means过程、univariate过程得到一些描述统计量;

可以用means过程后面加选项t来做t成组检验,可以用ttest过程来做成组或配对t检验。

而t检验的前途条件要求数据服从正态分布,如果不服从正态分布可以用非参数检验。

3、利用SAS的ODS中ods select选择你所需要的结果

可以先用ods trace来看一下输出的结果都有哪些,然后用ods select选择结果到相应的数据集中。

4、为了直接输出得到上面的表格,可以有两种方法来做。

一种是ODS;一种是利用put在结果输出窗口得到它,再粘贴到word中。

举例:四格表指标统计分析报表的sas宏程序

代码:

%macro chisq (database= ,var= ,varfmt=,index=) ;

proc freq data = &database. noprint ;

tables &var. * group /out = TabFreq ;

run ;

data ma ( where = (group ="A") ) mb ( where= (group ="B") ) ;

set TabFreq (keep = &var. group COUNT) ;

where &var. = . ;

run ;

ods listing close ;

ods output CrossTabFreqs = CrossTabFreqs chisq = chisqFishersExact=FishersExact ;

proc freq data = &database. ;

tables &var. * group /chisq exact expectednopercent norow ;

run ;

ods listing ;

proc sort out = EXPECTED(keep = EXPECTED)

data = CrossTabFreqs ( where = ( EXPECTED not=. ) ) ;

by Expected ;

run ;

data T(keep = T) ;

set EXPECTED ;

if n = 1 then T = EXPECTED ;

if T = . then delete ;

run ;

proc sort out = Frequency ( keep = Frequency)

data = CrossTabFreqs ;

by descending Frequency ;

run ;

data n (keep = n) ;

set Frequency ;

if n = 1 then n = Frequency ;

if n = . then delete ;run ;

run ;

data chisq1 (keep =value1 Prob1 ) ;

set chisq ( rename = (value = value1 Prob =Prob1) ) ;

where (Statistic = ('Chi-Square') | Statistic = ('卡方') ) ;

run ;

data chisq2 (keep =value2 Prob2 ) ;

set chisq ( rename = (value = value2 Prob =Prob2) ) ;

where ( Statistic = ( 'Continuity Adj. Chi-Square') | Statistic =('连续校正卡方') ) ;

run ;

data Fishersexact (keep = cvalue1) ;

set Fishersexact ;

where (Name1 = ('XP2_FISH') ) ;

run ;

data st (keep = ma mb n T value1 Prob1 value2 Prob2 cvalue1&var. c) ;

merge ma ( rename = (COUNT = ma) ) mb ( rename = (COUNT = mb) ) n Tchisq1 chisq2 Fishersexact ;

&var. = - 99 ;

if ma = . then ma = 0 ;

if mb = . then mb = 0 ;

format value1 6.2 value2 6.2 ;

run ;

data outa ( where = ( group ="A") ) outb (where = (group ="B") );

set CrossTabFreqs ;

format ColPercent 6.2 ;

run ;

data outt (drop = table group _TYPE_ _TABLE_ Expected Missing);

merge outa (rename = ( Frequency = A ColPercent = percentA) )

outb ( rename = ( Frequency = B ColPercent =percentB) ) ;

if &var. = . then &var. = - 99;

run ;

proc sort ;by &var. ;run ;

data _null_ ;

file print notitle ;

merge outt st ;

if &var. = - 99 then do ;

if n = 40 and 1 = 40 and T > = 5 then do ;

put @3"&index. " @70 'chisq = 'value1 @83 'P='Prob1 ;

end ;

put @5 "例数(缺失) " @22 A '(' MA ') ' @47 B '(' MB ') ';

end ;

else do ;

put @5 &var. '(%) ' @22 A '(' PercentA ') '@47 B'('PercentB ') ';

format &var. &varfmt..;

end ;

run ;

proc datasets;

delete chisq chisq1 chisq2 Crosstabfreqs ExpectedFishersexact

Frequency Ma Mb N Outa Outb Outt st stt t Tabfreq ; quit ;

%mend chisq ;

data jixian;

input id group$ SEX;

datalines;

1 A 1

2 A 2

3 A 2

4 A 2

5 B 1

6 B 2

7 B 1

8 B 2

;
run;

proc format;

value sexfmt 1='男性' 2='女性';

run;

%chisq (database=jixian ,var=sex ,varfmt=sexfmt,index=性别)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sas