/** set your overall alpha here and input your data **/
/** assumes your dataset is called "hoch" **/

%let overall=.05;

data hoch;
input raw_p;
datalines;
.147
.005
.002
;
run;

/*******************************************************/
/** shouldn't need to alter anything below this line! **/
/*******************************************************/

proc sort data=hoch; by descending raw_p; run;
data hoch; set hoch nobs=N_of_comparisons; by descending raw_p;

* initialize..;
if _N_=1 then do;
    rej = 0;
    revRank=N_of_comparisons;
end;

retain critical_value rej revRank;

if rej=0 then do;
    critical_value = &overall/(N_of_comparisons - revRank + 1);
    if raw_p <= critical_value then rej=1;
end;
/* else: don't compute critical value for subsequent significant entries */
else if rej=1 then critical_value = .;

revRank=revRank-1;
run;

proc format; value rejfmt 1='yes' 0='no'; run;

TITLE "Overall alpha=&overall";
proc print data=hoch;
var raw_p critical_value rej;
format rej rejfmt.;
format raw_p critical_value 5.4;
run;
/*******************************************************/

/*******************************************************/
/** Programmer: Karen Spritzer, UCLA, 3/12/14        ***/
/*******************************************************/