可参照如下macro,程序思路主要是根据孙振球主编的《医学统计学》173页中提到的多个独立样本两两比较的Nemenyi法检验。
原帖可以点击该链接:
http://www.stat-acad.cn/thread-124-1-1.html
/*-------------------------------------------------------------------------------------------
Codes for Nonparametric Nemenyi test for multiple comparisons
written by: Yuewei Liu
edited by: 无名
10-5-2008
-------------------------------------------------------------------------------------------*/
/* libname:The libname of your dataset */
/* filename:The name of your dataset */
/* gvar: The variable for grouping */
/* targetvar: The variable to be compared */
%macro noparametric(libname=,filename=,gvar=,targetvar=);
options nodate nonumber;title 'Result of the Nonparametric Kruskal-Wallis test';
/* Nonparametric Kruskal-Wallis test*/
proc npar1way wilcoxon data=&libname..&filename.;
var &targetvar;
class &gvar;
run;
proc rank data=&libname..&filename. out=c;
var x;
run;
proc sql noprint;
select count(*), n(distinct &gvar) into :num,:gn from c;
%let gn1=%eval(&gn);
select distinct &gvar,avg(&targetvar),count(*)
into :group1-:group&gn1 , :avg1-:avg&gn1 , :n1-:n&gn1 from c group by &gvar;
create table rank as
select count(&targetvar) as rn from c
group by &targetvar
having count(&targetvar)>1;
quit;
data _null_;
set rank end=eof;
ci+(rn **3-rn)/((&num)**3-(&num));
c=1-ci;
if eof then call symput('c',c);
run;
/* Calculation of Correction Factor */
data p q(rename=(i=j));
do i=1 to &gn1 ;
output p;output q;
end;run;
proc sql noprint;
select count(*),i,j
into :number,:ii separated by '-',:jj separated by '-' from p,q where i<j;quit;
data result;
%macro chisq;
%do t=1 %to &number ;
%let m=%scan(&ii,&t);
%let n=%scan(&jj,&t);
Group= "&&group&m -- &&group&n";
groupmean1=&&avg&m;
groupmean2=&&avg&n;
Chi_square=( &&avg&m - &&avg&n )**2*12/( &num*( &num +1)*(1 / &&n&m +1 / &&n&n ))/&c;
P_value=1-probchi(Chi_square,&gn1-1); /* Calculation of Chi-Square and P value */
output;format P_value 10.5 Chi_square 10.5;
%end;
%mend chisq;
%chisq
proc print data=result noobs;
title 'Result of Nonparametric Nemenyi test for multiple comparisons ';
run;
%mend;
%noparametric(libname=work,filename=dt1,gvar=g,targetvar=x);