我这里有一段程序讲解:
1、定义宏名称和宏变量
jiliang为宏名称,宏变量中database表示的数据集的名称,var为需要分析的变量名称,index为变量名的标签。
%macrojiliang (database,var,index);
2、宏程序块内容
/*将univariatenormal过程步的描述性统计结果和正态性检验的结果输出到到result数据集中*/
procunivariate normal noprint data=&database;
var &var; by group;
outputout=result n=n mean=mean median=medstd=std min=min max=max nmiss=nmiss PROBN=Pnor;
/*将A、B两组描述性统计和正态性检验的结果分别输出到a,b两个独立的数据集中,并定义变量的长度*/
dataa(where=(group="A"))b(where=(group="B"));
setresult;
formatmean 6.2 med 6.2 std 6.2 Pnor 18.2;
/*将a,b两个独立的数据集,根据不同的组别将结果重新命名,合并为一个result数据集中*/
dataresult(drop=group);/**/
mergea(rename=(n=NA nmiss=MA mean=MeanA med=medA std=StdA Min=MinA Max=MaxA Pnor=PnorA))
b(rename=(n=NBnmiss=MB mean=MeanB med=medB std=StdB Min=MinB Max=MaxB Pnor=PnorB));
Variable="&var";
/*利用ODS输出t检验结果数据集Ttests和正态性检验结果数据集Equality*/
odslisting close;
odsoutput TTests=TTests Equality=Equality ;
procttest data=&database;
var&var;class group;
run;
odslisting;
/*合并数据集Ttests、Equality和result到一个数据集中test1*/
datatest;
merge Equality TTests result;
byVariable;
/*生成正态且方差齐性的成组T检验的数据集,并定义变量格式*/
datatest1;
settest;
wherePnorA>0.05 and PnorB>0.05 and ProbF>0.05 andVariances="Equal";
lengthstat $ 15;
stat="t_value";
/*生成正态但方差不齐的成组T检验的数据集,并定义变量格式*/
datatest2;
settest1;
where ProbF<0.05 andVariances="Unequal";
lengthstat $ 15;
stat="t’ ";
/*合并成组T检验的数据集,并定义变量的长度*/
datatest(keep=tValue Probt stat);
mergetest1 test2;
tValue=abs(tValue);
formattValue 6.2 Probt 6.3;
/*利用ODS输出秩和检验结果数据集WilcoxonTest*/
odslisting close;
odsoutput WilcoxonTest=WilcoxonTest;
procnpar1way wilcoxon data=&database;
var &var;class group;
run;
odslisting;
/*将秩和检验中的NormalApproximation 结果Z值和双侧检验概率输出到wilcox1数据集*/
datawilcox1;
setWilcoxonTest;
ifName1="_WIL_" or Name1="PR_WIL" orName1="PTR_WIL" or Name1="PT2_WIL" or nValue1="." then delete;
Variable="&var";
run;
/*将秩和检验结果和描述性统计的结果输出到wilcox2数据集*/
datawilcox2;
merge wilcox1 result;
byVariable;
/*生成成组设计的两样本比较秩和检验的数据集*/
datawilcox21(keep=Name1 cValue1 stat);
setwilcox2;
wherePnorA<0.05 or PnorB<0.05;
lengthstat $ 15;
stat="Z_Wil";
dataC(where=(Name1="Z_WIL"))D(where=(Name1="P2_WIL"));
setwilcox21;
datawilcox22(keep=cValue1CcValue1D statC);
mergeC(rename=(Name1=Name1CcValue1=cValue1Cstat=statC))
D(rename=(Name1=Name1DcValue1=cValue1D stat=statD));
/*根据t检验与秩和检验的不同结果设置输出格式*/
data_null_;
mergeresult test wilcox22;
ifPnorA>0.05 and PnorB>0.05 then do;
fileprint notitle;
put#1 @3 "&index"
#2@5 "例数(缺失)"@22 NA'('MA')' @42 NB'('MB')'
@60stat '=' 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;
elseif PnorA<0.05 or PnorB<0.05 then do;
fileprint notitle;
put#1 @3 "&index"
#2@5 "例数(缺失)"@22 NA'('MA')' @42 NB'('MB')'
@60statC '=' cValue1C @80'P=' cValue1D
#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;
run;
%mendjiliang;
但是我放到SAS中运行没有错误出现,输出结果却啥都没有。
怎么样才能运行出下面的结果:
%jiliang(data,XINLV,心率);
%jiliang(data,WEIGHT,体重);
心率
例数(缺失) 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
体重
例数(缺失) 100 (0 ) 105 (0 ) Z_Wil =0.5913 P=0.5543
均数±标准差 59.62 ±8.60 58.84 ±8.10
中位数 60.00 60.00
最大值 85 75
最小值 41 42