--- %%NOBANNER%% -->
/*------------------<-- Start of Description -->--------------------\
| Sample size for two independent means; |
|--------------------<-- End of Description -->---------------------|
|--------------------------------------------------------------------|
|--------------<-- Start of Files or Arguments Needed -->-----------|
| Arguments: |
| - Required: |
| std = standard deviation |
| y1 = true group 1 mean under null hypothesis |
| min_y2 = smallest possible true group 2 mean |
| - Optional: |
| max_y2 = largest possible true mean for group 2 |
| inc_y2 = increment value for range of y2 |
| r = ratio of group 2/group 1 sample size(n2/n1),default=1 |
| alpha = type 1 error, e.g. .01 or .05, default=.05 |
| sides = 1 or 2 for 1 or 2 sided test, default=2 |
| power = desired power, e.g. .80, .90, default=.80 |
| plot = 'P' for line printer plot of group 2 sample size vs y2 |
| 'G' for SAS/GRAPH plot of group 2 sample size vs y2 |
| unit = units for mean, e.g. mg, lbs., cm, etc. |
| Output: Sample size per group for true group 1 mean of y1 vs true |
| group 2 means ranging from min_y2 to max_y2 |
|---------------<-- End of Files or Arguments Needed -->------------|
|--------------------------------------------------------------------|
|----------------<-- Start of Example and Usage -->-----------------|
| Example: %mn2_ss(alpha=.05,sides=1,y1=0,min_y2=.2,max_y2=3, |
| inc_y2=.1,std=1, power=.9,unit=gals,plot=p); |
| Usage: %mn2_ss(ALPHA=.05,SIDES=2,POWER=.80,Y1=.,MIN_Y2=., |
| MAX_Y2=.,INC_Y2=.,R=1,STD=.,PLOT= , UNIT=); |
| Reference: Bergstralh, EJ. SAS macros for sample size and power |
| calculations. Proceedings of the 9th annual SAS Users |
| Group International Conference. |
| Equation #6. |
\-------------------<-- End of Example and Usage -->---------------*/
%MACRO mn2_ss(ALPHA=.05,SIDES=2,POWER=.80,Y1=.,MIN_Y2=.,
MAX_Y2=.,INC_Y2=.,R=1,STD=.,PLOT= , UNIT=);
/*--------------------------------------------\
| Author: Michael Riggs and Eric Bergstralh;|
| Created: November 16, 1992; |
| Modified: January 9, 1998; |
| Purpose: Power for two independent means; |
\--------------------------------------------*/
OPTIONS MISSING=' ' NOCENTER;
%LET PLOT=%UPCASE(&PLOT);
DATA T1;
ALPHA=&ALPHA;
SIDES=&SIDES;
Y1=&Y1;
MIN_Y2=&MIN_Y2;
MAX_Y2=&MAX_Y2;
INC_Y2=&INC_Y2;
POWER=&POWER;
R=&R;
STD=&STD;
ZALPHA=(PROBIT(1-ALPHA))*(SIDES=1) + (PROBIT(1-ALPHA/2))*(SIDES=2);
ZBETA=PROBIT(POWER);
IF MAX_Y2=. THEN DO;
MAX_Y2=MIN_Y2+1; INC_Y2=MIN_Y2+2; *NEED 1 EXEC OF DO;
END;
TY1=Y1;
TSTD=STD;
TR=R;
DO Y2=MIN_Y2 TO MAX_Y2 BY INC_Y2;
N=(TSTD**2)*(1+1/TR)*(ZALPHA+ZBETA)**2/(TY1-Y2)**2;
DF=ceil(N) + TR*ceil(N) - 2;
N1=ceil( n*(df+3)/(df+1) ); *Increase n for t-test 1/9/98;
n2=n1*tr; *1/9/98;
OUTPUT;
END;
LABEL Y1="Group 1*Mean (&UNIT)"
Y2="Group 2*Mean (&UNIT)"
R='N2/N1*Ratio';
FOOTNOTE1 ' ';
RUN;
PROC PRINT SPLIT='*';
ID y1;
VAR Y2 N1 N2;
TITLE2
'SAMPLE SIZE REQUIREMENTS FOR COMPARING TWO MEANS';
TITLE3
"Alpha=&alpha, Sides=&sides, STD=&std, Power=&power, Ratio N2/N1=&r ";
TITle4"Group 1 true mean=&y1(&unit)";
run;
%IF "&MAX_Y2" NE "" %THEN %DO;
%IF &PLOT= P %THEN %DO;
PROC PLOT NOLEGEND;
PLOT N2*Y2/ HAXIS=&MIN_Y2 TO &MAX_Y2 BY &INC_Y2;
LABEL N2='Sample Size for Group 2'
Y2="True Group 2 mean(&unit)";
%END;
%ELSE %IF &PLOT= G %THEN %DO;
PROC GPLOT ;
PLOT N2*Y2;
SYMBOL1 Font= v=none i=join l=1;
LABEL N2='Group 2 Sample Size'
Y2="True Group 2 mean(&unit)";
run;
%END;
RUN;
%END;
%MEND mn2_ss;