程序:
DATA anova1;
INPUT z x @@;
CARDS;
1 128.1 1 134.1 1 133.1 1 138.9 1 140.8 1 127.4
2 150.3 2 147.9 2 136.8 2 126.0 2 150.7 2 155.8
;
run;
proc sort;by z;
proc print data=anova1; run;
PROC univariate normal;
var x;
by z;
run;
proc anova;
class z;
model x=z;
means z/duncan hovtest=bartlett;
run;
%macro jiliang (database,var,index);
/*将univariate normal过程步的描述性统计结果和正态性检验的结果输出到到result数据集中*/
proc univariate normal noprint data=&database;
var &var; by group;
output out=result n=n mean=mean median=med std=std min=min max=max nmiss=nmiss PROBN=Pnor;
/*将A、B两组描述性统计和正态性检验的结果分别输出到a,b两个独立的数据集中,并定义变量的长度*/
data a(where=(group="A"))b(where=(group="B"));
set result;
format mean 6.2 med 6.2 std 6.2 Pnor 18.2;
/*将a,b两个独立的数据集,根据不同的组别将结果重新命名,合并为一个result数据集中*/
data result(drop=group);/**/
merge a(rename=(n=NA nmiss=MA mean=MeanA med=medA std=StdA Min=MinA Max=MaxA Pnor=PnorA))
b(rename=(n=NB nmiss=MB mean=MeanB med=medB std=StdB Min=MinB Max=MaxB Pnor=PnorB));
Variable="&var";
/*利用ODS输出t检验结果数据集Ttests和正态性检验结果数据集Equality */
ods listing close;
ods output TTests=TTests Equality=Equality ;
proc ttest data=&database;
var &var;class group;
run;
ods listing;
/*合并数据集Ttests、Equality和result到一个数据集中test1*/
data test;
merge Equality TTests result;
by Variable;
/*生成正态且方差齐性的成组T检验的数据集,并定义变量格式*/
data test1;
set test;
where PnorA>0.05 and PnorB>0.05 and ProbF>0.05 and Variances="Equal";
length stat $ 15;
stat="t_value";
/*生成正态但方差不齐的成组T检验的数据集,并定义变量格式*/
data test2;
set test1;
where ProbF<0.05 and Variances="Unequal";
length stat $ 15;
stat=" t' ";
/*合并成组T检验的数据集,并定义变量的长度*/
data test(keep=tValue Probt stat);
merge test1 test2;
tValue=abs(tValue);
format tValue 6.2 Probt 6.3;
put #1 @3 "&index"
#2 @5 "例数(缺失)" @22 NA'(' MA')' @42 NB'(' MB')'
@60 stat '=' tValue @80 'P=' Probt
#3 @5 "均数±标准差" @22 MeanA'±' StdA @42 MeanB'±' StdB
#4 @5 "中位数" @22 MedA @42 MedB
#5 @5 "最大值" @22 MaxA @42 MaxB
#6 @5 "最小值" @22 MinA @42 MinB;
end;
%mend jiliang;
%jiliang (anova1,z,tizhong);
我想要这种格式的结果:
心率
例数(缺失) 103 (0 ) 106 (0 ) t_value =0.23 P=0.816
均数±标准差 79.64 ±11.25 80.01 ±11.65
中位数 80.00 80.00
最大值 120 110
最小值 53 50