
proc iml;
   n = 594;
   p = .01;

   c = {"n(sig.)" "p(n(sig))" "p(n>=n(sig))"};
   comb = j((n+1),1,1);
   prob = comb;
   cum_p = prob;
   r_val = prob;
   results = j((n+1),3,1);

   do r = 0 to n;
      q = 1 - p;
      max = max((n-r),r);
      min = min((n-r),r);
      easy = n - max;
      rest = n - max - min;
      so_far = 1;
      do i = 1 to easy;
         num = max+i;
         den = i;
         so_far = so_far * num / den;
      end;
      do i = 1 to rest;
         so_far = so_far * (max + min + 1);
      end;
      r_val[r+1] = r;
      comb[r+1] = so_far;
      results[r+1,2] = (q**(n-r))*(p**r) * so_far;
      results[r+1,1] = r;
   end;
   cum_pr = 0;
   do i = n+1 to 1 by -1;
      j = n +2 - i;

      cum_pr = cum_pr + results[i,2];

      cum_p[i] = cum_pr;
      results[i,3] = cum_pr;
   end;
   print p;
   print results[colname=c];

   do i = 1 to n+1 while (results[i,3] > p);
   end;
   i = i - 1;
   print "Number of significant results needed for overall alpha < p";
   print i;
