SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1170|回复: 0
打印 上一主题 下一主题

sas医学统计案例程序:差异检验 transpose ods html NPAR1WAY means freq gplo

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-5-20 19:28:37 | 只看该作者

sas医学统计案例程序:差异检验 transpose ods html NPAR1WAY means freq gplo

sas医学统计案例程序:差异检验 transpose ods html NPAR1WAY means freq gplot corr macro libname xls
/*本程序都是我跑出来的,数据也有,拥有 此程序可以让你sas 编程进步飞快
可以登录我的msn查看更多的SAS CODE:
<!-- m --><a class="postlink" href="http://cid-7a2c11bd1414b988.spaces.live.com/blog/cns!7A2C11BD1414B988!208.entry">http://cid-7a2c11bd1414b988.spaces.live ... !208.entry</a><!-- m -->

数据下载地方:http://www.pinggu.org/bbs/dispbbs.asp?boardid=68&amp;id=460114&amp;star=1#460114
*/

/*先导入每个表单:s1-对照组;s2-间重病例;s3-持重病例;
                s11-对照组人员背景;s12-对照组鼻塞,流涕,喷嚏,鼻痒,眼痒,流泪;
                s13-28个变量;s14-SF36中8个变量;
SF-36量表。此量表共包括36个条目,分
为8个维度,即生理功能(physical function,PF)、生理职能(re-
sponsibility of physical,RP)、躯体疼痛(body pain,BP)、总体健
康(general health,GH)、活力(vitality,VT)、社会功能(social
function,SF)、情感职能(responsibility of emotion,RE)和精神
健康(mental health,MH)
*/
options validvarname=any;
%macro inputdata;/*导入三个表*/
%do i=1 %to 3;
%let ref=&quot;E:\lixin\q&amp;i..xls&quot;;/**/
libname lib &amp;ref mixed=yes; *dbmax_text=50;/*虽然有mixed但是要保证exl前八个记录不能全是数值,而且不需要dbmax_text*/
%do j=1 %to 4;/*办法二:LibName xlsLib &quot;H:\ExcelToSas\Demo.xls&quot; mixed=yes ;
Missing M ;
Data Sheet3( drop=_: ) ;
Set xls.&quot;Sheet3$&quot;n( reName=( x=_x y=_y ) ) ;
x = input( _x , best. ) ;
y = input( _y , best. ) ;
Run ;
LibName xls clear ;*/
%let sheet=&quot;sheet&amp;j$&quot;n;
data biyan.s&amp;i&amp;j;
   set lib.&amp;sheet;
   run;
%end;
libname lib clear;
%end;
%mend ;
%lixin;
%macro setli;/*按表单合并,共4个*/
%do i=1 %to 4;
%let dui=s1&amp;i;
%let jian=s2&amp;i;
%let chi=s3&amp;i;
%put &amp;dui;
data su&amp;i;
*format class $ ;/*三个组别:对照 间重 持重*/
set biyan.&amp;dui(in=x) biyan.&amp;jian(in=y) biyan.&amp;chi(in=z);
if x=1 then   class='A'; /*if不需要加%*/
if y=1 then  class='B';
if z=1  then  class='C';
run;
%end;
%mend inputdata;
%inputdata;


/*一,两样本或三样本差异检验:持重和间重
在总体分布形式难确定或总体分布为偏态时,不适用T检验,故选用非参数统计方法。使用*/
%macro NPA();/*title显示还有个问题:我想显示把表的名字也显示出来,改如何,因为这个结果看不出来是比较哪个表*/
filename odsout 'e:\lixin\htmls';
ods listing close;
ods html body='CORR&amp;NPA_mapbody.html'
         contents='CORR&amp;NPA_contents.html'
         frame='相关分析和差异检验_frame.html'
         /*nogtitle*/
         path=odsout;
         /*nogtitle 添加此选项以后,可以自己定义目录名字,具体参考Gmap:Example 5*/
%let title1=&quot;间重和持重&quot;;
%let title2=&quot;对照和持重&quot;;
%let title3=&quot;对照和间重&quot;;
%do i=2 %to 4;
    %let s=su&amp;i;
    %do j=1 %to 3;
      %if &amp;j=1 %then %let zu='A' ; /*注意此处要两个let,而且if 在数据步外,所以要加%if*/
      %if &amp;j=2 %then %let zu='B' ;
      %if &amp;j=3 %then %let zu='C' ;
   /*不同组差异比较*/
   proc NPAR1WAY Wilcoxon anova DATA=&amp;s(drop=编号);
           class class;
           where class^=&amp;zu;
           title &amp;&amp;title&amp;j 差异比较;
     output out=out;
      run;
   
     /*同组相关分析*/
      proc corr data=&amp;s(drop=编号) NOSIMPLE;
       where class=&amp;zu;
                title COLOR=RED height=20pt  &amp;&amp;title&amp;j 相关分析;
      run;
   data plot;
     set out;
  n+1;
  keep _VAR_ PT2_WIL n;
   proc print ;/*找出差异显著的项*/
        where PT2_WIL&lt;=0.05;
  title  &amp;&amp;title&amp;j 显著项;/*title可以不用连字符来连接字符串*/
      run;
      goptions reset=global gunit=pct border cback=white
         colors=(blue) htitle=4;
      symbol color=RED interpol=none width=2 value=dot height=1;
      axis1 label=( angle=90 height=3 &quot;Two-sided P value&quot;) ;
   
      proc gplot data=plot;
     plot PT2_WIL*_VAR_/vref=(0.05 0.01) vaxis=axis1;
        title &amp;&amp;title&amp;j 显著项;
      run;
      quit;
     %end;
%end;
ods html close;
ods listing;
%mend;
%NPA;



/*按性别组间检测*/
%macro sex(zu);
data sex;
merge  su1(keep=性别) su4 ;
run;
  proc NPAR1WAY Wilcoxon anova DATA=sex ;
             class 性别;
   where class=&amp;zu;title &quot;&amp;zu&quot;;/*宏在双引号才有效*/
   output out=wilsex;
   run;
  proc print data=wilsex;
  var PT2_WIL _VAR_;
  where PT2_WIL&lt;=0.05;
  run;

%mend;
%sex('C');/*参数可以改为B,A*/
               


%MACRO MEAN;
filename odsout 'e:\lixin\htmls';
ods listing close;
ods html body='mean_mapbody.html'
         contents='mean_contents.html'
         frame='均值图.html'
         /*nogtitle*/
         path=odsout;
%let title2=&quot;VAS&quot;;
%let title3=&quot; RQLQ&quot;;
%let title4=&quot;SF-36&quot;;
%do k=2 %to 4;
%LET DATASET=su&amp;k;
proc means data=&amp;dataset(drop=编号) maxdec=1 mean;/*maxdec=3设定均值小数位数*/
     class class;
     *title 'mean 求均值';
     output OUT=outmeans;
     title &amp;&amp;title&amp;k 均值分析;
     run;
data meansu2;
set outmeans;
if _type_=1 &amp; _STAT_=&quot;MEAN&quot;;
drop _type_ _freq_;
run;
PROC transpose data=meansu2 out=trans;
by class;
run;
proc sort data=trans out=bymean;
  by _name_;
run;
data chart;
set bymean;format col1 3.1;
label _name_=&quot;症状&quot; col1=&quot;均值&quot;;
run;
goptions reset=global colors=(red) ;
pattern color=blue;
title &amp;&amp;title&amp;k 均值图;
proc gchart data=chart;
  vbar3d class/discrete/*分组显示*/
  sumvar=col1
  inside=mean
  group=_NAME_;
  run;quit;
%end;
ods html close;
ods listing;
%MEND;
%MEAN;

%macro top();/*RQLQ活动影响最大的*/
filename odsout 'e:\lixin\htmls';
ods listing close;
ods html body='top_mapbody.html'
         contents='top_contents.html'
         frame='活动前三项.html'
         /*nogtitle*/
         path=odsout;
data top;
   merge su1 su3;
  %do i=1 %to 3;
   act&amp;i=compress(活动&amp;i,,'ds');
   %end;
  keep 编号 class  act1 act2 act3;/*1 活动2 活动3 活动1*/
by class;
run;
data top1;
set top;
  n+1;/*构建一个没有相同值的观察向量n*/
select(class);
when('A') 组别='对照';
when('B') 组别='间重';
when('C') 组别='持重';
end;
run;
  proc transpose data=top1
        out=toptras(rename=(col1=活动));
  var act1-act3 ;/*将此三个变量合并为一列,需要一个没有相同值的向量n,*/
  by class n 组别 ;run;
  
  proc freq data=toptras order=freq ;
  tables 活动*组别/NOCOL NOROW;
  *where class='B';
  title 'RQLQ活动影响排名' ;
  run;
ods html close;
ods listing;
  %mend;
  %top;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-5 17:29 , Processed in 0.071038 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表