Confidence Interval for Adverse Event

sas day 53:

A classical AE table is by  SOC (body system class) and  Preferred term( AEDECOD). The overall AE table could last for over 100 pages long.

What if we’d like to see the count and confidence Interval for some Special Interested Adverse Event (SIAE) within the whole safety population.

Challenge: How to generate an AE table with confidence Interval  ?

Example: 

Selected AE preferred TermSeriousNon-seriousAll AE Freq category
cranial nerve paralysis
95% CI
x(xx.x)
(lower CI, upper CI)
x(xx.x)
(lower CI, upper CI)
x(xx.x)
(lower CI, upper CI)
rare/uncommon/common
Vocal cord paralysis
95% CI
x(xx.x)
(lower CI, upper CI)
x(xx.x)
(lower CI, upper CI)
x(xx.x)
(lower CI, upper CI)
rare/uncommon/common
...............

 

Key point: Each adverse event as an EVENT in the total population. If there are 8 special adverse events then we need to create a dummy ADSL population 8 times, each set of ADSL patients for one adverse event.

Each Column run a Proc Freq (3 times, non-serious, serious, all event)  

Key Procedure: Proc Freq, Binomial 

Solution: 

  1. Create a Dummy ADSL Dataset (Do … Output) for each AEDECOD term. 
data adsl_adr(keep= subjid aedecod);
set adsl;
do i=1 to pobs;
set adr point=i nobs= pobs;
output;
end;
run;

   

       2. Proc Freq to Calculate Confidence Interval for Serious Event

data ci1;
merge adsl_adr(in=a) ser(in=b);
if a;
by subjid aedecod; 
run;

proc freq data=ci1y;
by aedecod trt1;
tables aey/ binomial(exact)  alpha=0.05;
output out=ciy binomial;
run;

data ciyy;
set ciy;
sort=_n_;
c1= "("||strip(put(round((XL_BIN), 0.00001), best.))||", "||strip(put(round((XU_BIN), 0.00001), best.))||")";
label="   95% Confidence Interval";
keep label aedecod c1 ord2 sort;
run;

      3. Repeat Step 2 for Non-serious and All events.

Output:

 

Happy Studying!

 

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Social media & sharing icons powered by UltimatelySocial
%d bloggers like this: