Macro for ANOM with Equal Sample Sizes
/****************************************************************/
/* S A S S A M P L E L I B R A R Y */
/* */
/* NAME: ANOMH1 */
/* TITLE: Macro for ANOM with Equal Sample Sizes */
/* PRODUCT: SAS */
/* SYSTEM: ALL */
/* KEYS: ANOM, Analysis of Means, */
/* PROCS: */
/* DATA: */
/* */
/* REF: L.S. Nelson (1983), 'Exact Critical Values for */
/* Use with the Analysis of Means'. Journal of Quality */
/* Technology 15, pp. 40-44. */
/* */
/* D.O. Fulenwider (1988), 'Using SAS Software for */
/* Analysis of Means', "SAS Users Group International: */
/* Proceedings of the Thirteenth Annual Conference, */
/* 1212-1219. */
/* */
/* NOTES: This macro is designed to provide the critical */
/* values needed for use with the analysis of means. */
/* The values are valid for the analysis of means of */
/* equal sample sizes for significance levels of .10, */
/* .05, .01, and .001 . The values generated are */
/* approximate values with the absolute maximum */
/* deviation from the true table values to be less */
/* than one in the third significant digit. */
/* */
/****************************************************************/
%macro anomh1(alpha,df,k);
%global halpha;
data _null_;
/* Check for errors in arguments of the function */
if &df lt 3 then do;
put ' Error: the degrees of freedom are less than 3';
abort;
end;
if &k gt &df then do;
put ' Error: the number of means is greater than the number of'
' degrees of freedom. degrees of freedom for error should be'
' k(n-1). check your input.';
abort;
end;
/* Build arrays to contain the constants to be used for */
/* approximating the halpha values. */
if &alpha=.10 then do;
array b100{8} b1-b8;
b100{1}= 1.2092;
b100{2}= 0.7992;
b100{3}= 0.6238;
b100{4}= 0.4797;
b100{5}= 1.6819;
b100{6}=-0.2155;
b100{7}= 0.4529;
b100{8}=-0.6095;
end;
if &alpha=.05 then do;
array b050{8} b1-b8;
b050{1}= 1.7011;
b050{2}= 0.6047;
b050{3}= 0.7102;
b050{4}= 1.4605;
b050{5}= 1.9102;
b050{6}= 0.2250;
b050{7}= 0.6300;
b050{8}=-0.2202;
end;
if &alpha=.01 then do;
array b010{8} b1-b8;
b010{1}= 2.3539;
b010{2}= 0.5176;
b010{3}= 0.7107;
b010{4}= 4.3161;
b010{5}= 2.3629;
b010{6}= 4.6400;
b010{7}= 1.8640;
b010{8}= 0.3204;
end;
if &alpha=.001 then do;
array b001{8} b1-b8;
b001{1}= 3.1981;
b001{2}= 0.3619;
b001{3}= 0.7886;
b001{4}= 8.3489;
b001{5}= 3.1003;
b001{6}=27.7005;
b001{7}= 5.1277;
b001{8}= 0.7271;
end;
k1 = log(&k);
k2 = log(&k-2);
v1 = 1/(&df-1);
halpha = b1 + b2*(k1**b3) + (b4 + b5*k1)*v1 +
(b6 + b7*k2 + b8*k2*k2)*v1**2;
call symput('halpha',left(put(halpha,8.3)));
%mend anomh1;