全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1537 6
2014-01-15
% macro pairTest(title,infile,var1,var2);
data dif;
   set &infile.(keep=&var1. &var2.);
   var_new=&var1-&var2;
run;
data dm;
   set &infile.(keep=&var1. rename=(&var1.=var_cb) in=ina) &infile(keep=&var2 rename=(&var2=var_cb));
   if ina then group=1 ;else group=2;
proc univariate data=dm;/*描述统计*/
   var var_cb;
   by group;
   output out=dscrp n=n nmiss=nmiss mean=mean std=std median=med q1=q1 q3=q3  min=min max=max ;
data one(where=(group=1)) two(where=(group=2));
    set dscrp;

data dhp;
    merge one(rename=(n=NA nmiss=MA mean=MeanA med=medA std=stdA Q1=Q1A Q3=Q3A Min=MinA max=MaxA ))
          two(rename=(n=NB nmiss=MB mean=MeanB med=medB std=stdB Q1=Q1B Q3=Q3B Min=MinB max=MaxB ));

proc univariate normal data=dif;/*正态性检验*/
    var var_new;
    output out=N_test n=n nmiss=nmiss normal=z probn=probn ;
       

ods listing close;
ods output TTests=ttests;
proc ttest data=dif;/*配对T检验*/
    paired &var1.*&var2.;
ods listing;

data result;
    merge N_test dhp ttests;
        format normal 6.2 probn 6.4 tValue 6.2 probt 6.4 MeanA 6.2 stdA 6.4 MeanB 6.2 stdB 6.4;
data _NULL_;/**/
    set result;
    file print notitle;
  put
    # 1 @30  "&title"
    # 2 @3  "访视"      
        # 3 @3  "正态性检验 " @25 "Z=" z @48"P=" probn
        # 4 @3  "配对T检验"   @25 "T=" tValue @48 "P=" Probt
    # 5 @3  "例数(缺失)"  @22 NA '(' MA ')' @45 NB '(' MB ')'
        # 6 @3  "均数(标准差)"  @22 MeanA '(' stdA ')'  @45 MeanB '(' StdB ')'
        # 7 @3  "中位数(P25~P75)"  @22 MedA '(' Q1A '-' Q3A ')'  @45 MedB '(' Q1B '-' Q3B ')'
        # 8 @3  "最小值-最大值"  @22 MinA '-' MaxA @45 MinB '-' MaxB;
run;

%mend;


ods rtf file="E:\BC-BIOSTAT\ed\sasfile\服药前后血液检查差异性比较结果.rtf";
%pairTest(血红蛋白,ed.sas_db, hgb0,hgb1);
%pairTest(血细胞,  ed.sas_db, rbc0,rbc1);
%pairTest(白细胞,  ed.sas_db, wbc0,wbc1);
%pairTest(血小板,  ed.sas_db, plt0,plt1);
ods rtf close;
ods listing;

二维码

扫码加我 拉你入群

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

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

全部回复
2014-1-15 15:21:15
请问我想把我所要的结果打印到一个文档中去,但是出来的结果不是我所想要的
二维码

扫码加我 拉你入群

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

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

2014-1-15 15:22:29
我自定义的表格并没有打印出来,单独的程序是可以的,编成宏就不行了,求大神指点迷津
二维码

扫码加我 拉你入群

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

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

2014-1-15 22:15:36
if no syntax error, 'file print notitle;' directs your output to the SAS listing file instead of the RTF file you wanted.
you'd better replace your DATA _NULL_ step with PROC REPORT or follow the instructions of Cynthia
http://www2.sas.com/proceedings/sugi30/088-30.pdf
二维码

扫码加我 拉你入群

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

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

2014-1-16 01:44:01
非常同意楼上的观点.还有一点也要注意.
除了cards/datalines,每个数据步或者是过程都应该(或者最好)用RUN(QUIT)来结束.否则,有时侯结果不可预料.比如在这里就是一个典型的例子: 因为没有结束上一个过程(PROC UNIVARIATE),ODS OUTPUT自然从PROC UNIVARIATE里寻找对象而导致失败(因为PROC UNIVARIATE里不存在TTESTS表格).在这里SAS报错还是好的.比如你用了连续两个PROC TTEST.结果恐怕就混淆了,你却毫无意识.
京剧
二维码

扫码加我 拉你入群

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

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

2014-1-16 09:27:48
邓贵大 发表于 2014-1-15 22:15
if no syntax error, 'file print notitle;' directs your output to the SAS listing file instead of the ...
Your answer is very helpful for me,Thanks very much for you replying,I will learn the pdf carefully.
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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