老师们帮忙看看该sas 宏错在哪里,运行总是出错!
谢谢!
%macro RR(delta,n1,n2,distr1,distr2,essai,report=1);
%global pow;
data -null-;
call symput("seed ",date());
run;
Data depart;
do numessai=1 to &essai;
do pat=1 to %eval(&n1+&n2);
if pat<=&n1 then do;
Distr=rantbl(&seed,&distr1);
group=1;
end ;
if pat> %eval(&n1) and pat <= %eval (&n1+&n2)
then do;
Distr=rantbl(&seed,&distr2);
group=2;
end;
output;
end;
end;
Run;
proc freq data=depart(where=(group in (1,2))) noprint;
by numessai;
tables group * distr /cmh2 scores=ridit;
output out=TRT-AB N LGRRC1;
run;
Data power1;
set TRT-AB;
if l-lgrrc1^=.;
power=l-lgrrc1>=δ
scenario="TRT-A/TRT-B";
Run;
proc univariate data=power1 noprint;
by scenario;
var power;
output out =power2 n=n sum=rep;
run;
Data power3;
length distr1 distr2 $ 30 scenario $ 20;
merge power2;
by scenario;
lcl=100-100*Betainv(0.975,n-rep+1,rep)+0;
ucl=100*Betainv(0.975,rep+1,n-rep)+0;
lC="["|| compress (put(lcl,best4.))||"%;"|| compress (put(ucl,best4.))||"%"||"]";
distr1=compress(symget("distr1")*100||"%");
distr2=compress(symget("distr2")*100||"%");
n1=symget("n1");
n2=symget("n2");
delta=symget("delta");
simul=symget("essai");
power=100*rep/n;
call symput('pow',put(power,best4.1));
Run;
%if %eval(&report)=1 %then %do;
Title2
Proc report data= power3 headline headskip nowindows split ="@" ls=120;
column("--" scenario simul delta power lc
("Expected sample size" "--" n1 n2)
("Expected rates" "--" distr1 distr2));
define scenario /order format=$18. left width=18 "Scenario";
define simul/display format=$5.center width=12 "N? of @ simulations";
define delta /display format=$5.center width=6"Delta";
define power/display format=4.1 center width=6"Power";
define lC/display format=$12.center width=12"95% cl of @ Power";
define n1/display format=$10.center width=12 "TRT-A";
define n2/display format=$10.center width=12 "TRT-B";
define distr1/display format=$12.center width=12 "TRT-A";
define distr2/display format=$12.center width=12 "TRT-B";
compute after;
line @31 108*"-";
endcomp;
fotnote "seed=&seed";
%end;
Run;
%mend RR;