BookmarkSubscribeRSS Feed
raja777pharma
Fluorite | Level 6

Hi Team,

I am trying to calculate the CI intervals by using the below code, but i am not getting the same results which are generating the CI intervals by other data step code in Computation of CIs for Binomial proportions in SAS and its practical difficulties (lexjansen.com) 

 

My code is :

ODS OUTPUT Binomial = CI14;
PROC FREQ DATA=firstx;
BY apaneln ;
TABLES avalc/BINOMIAL alpha=0.2 out=n14(rename=(count=nn));
exact binomial;
RUN;
ODS TRACE OFF;

Code from web :

data Test;
 merge ntc_n Nct; 
 by apaneln apanel; 
 prob = count/N; 
 if   prob=0 then CI_LOW=0; 
 if   prob=1 then CI_HIGH=1; 
 if   prob ne 0 then CI_LOW=round((1-betainv(.8,(N-count+1),count)),.0001); 
 if   prob ne 1 then CI_HIGH=round((1-betainv(.2,(N-count),count+1)),.0001); 
    pct_ci = cat (round(prob,0.001),' (', round(CI_LOW,0.001), ', ', round(CI_HIGH,0.001), ')') ;

    proc sort; by apaneln; 
run;

Please let me know how to generate CI values by proc freq as similar above data step

 

Thank you,

Rajasekhar.

 

2 REPLIES 2
FreelanceReinh
Jade | Level 19

Hi @raja777pharma,

 

Just use the correct beta quantiles: The first argument of your two BETAINV function calls must be 1-a/2 and a/2, respectively, i.e., .9 and .1, not .8 and .2 with alpha=0.2.

Rick_SAS
SAS Super FREQ

The formula that PROC FREQ uses is given in the documentation section "Binomial Proportions.".

The following DATA step reproduces the output from PROC FREQ by manually coding the formula. 
In the sashelp.class data, there are n=19 observations and n1=9 females.


PROC FREQ DATA=sashelp.class;
   TABLES SEX/BINOMIAL(CL=clopperpearson) alpha=0.2;
   ods select BinomialCLs;
RUN;

data Test;
alpha = 0.2;
n=19;
count=9;
prob = count/n; 
if   prob=0 then CI_LOW=0; 
else do;
   F = quantile("F", alpha/2, 2*count, 2*(n-count+1));
   frac = (n-count+1) / (count*F);
   CI_LOW = 1/(1 + frac);
end;
if prob=1 then CI_HIGH=1; 
else do;
   F = quantile("F", 1-alpha/2, 2*(count+1), 2*(n-count));
   frac = (n-count) / ((count+1)*F);
   CI_HIGH = 1/(1+frac);
end;
keep alpha n count prob CI_LOW CI_HIGH ;
run;
PROC PRINT;RUN;

 

sas-innovate-2024.png

Available on demand!

Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.

 

Register now!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 2 replies
  • 579 views
  • 4 likes
  • 3 in conversation