这是张高魁, 夏结来, 姚晨《相对率的非劣效性试验检验效能及样本量的模拟计算方法及SAS实现》的程序
例: 一种足癣标准治疗方案, 疗程结束时的真菌学清除率为80%。现提出一种相对简单的治疗方案, 为考察对比新方案与标准治疗方案的疗效, 拟设计一个非劣效性试验, 临床提出新方案的疗效达到标准方案清除率的90% 作为临床非劣效的相对标准, 即: 当新方案与标准方案在疗程末的真菌学相对清除率( 新方案P标准方案) 的95% 可信区间下限不低于0. 9时, 即可判断其临床非劣效于标准方案。问题: ( 1) 、病例为100 对, 检验的效能是多少? ( 2) 、要使效能达到0. 8, 需要多少病例?
问题(1)解决的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;
- /**对每组随机数进行CMH检验,并计算相对率;*/
- proc freq data=depart(where=(group in (1,2))) noprint;
- by numessai;
- tables group * distr /cmh2 scores=ridit;
- output out=TRT_AB N l_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;
- footnote "seed=&seed";
- %end;
- Run;
- %mend RR;
- %RR(0.9, 100, 100, 0.80, 0.80, 1000);
复制代码