全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1820 0
2014-09-16

我这里有一段程序讲解:

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


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群