*************************************************************************************************; * CLIENT: ModernaTX, Inc. * PROTOCOL: mRNA-1273-P301 * PURPOSE: Create Inferential Statistical Analysis Macro for 95% CI results * INPUT FILES: ADaM datasets * OUTPUT FILES: stat macro * USAGE NOTES: *************************************************************************************************; * Copyright 2020 Pharmaceutical Product Development, Inc. * All Rights Reserved. *************************************************************************************************; %macro clopper (libin=adb,datain=, vac=, sar=,sec=, dataout=, subset=, byvar=, ); %if (&datain.=ADAR or &datain.=ADARP7D) %then %do; %if &datain.=ADAR %then %do; data &datain.; set &libin..&datain.; where &sar.='Y' and ATPTREF in &vac.; run; %end; %else %do; data &datain.; set &libin..&datain.; where &sar.='Y' and ATPTREF in &vac. and ANL06FL='Y'; run; %end; data temp; set &datain.; length trt $20; trt=trt01a; output; trt='Total'; output; run; data temp2; set &libin..adar; where &sar.='Y' and ATPTREF in &vac.; run; data temp2; set temp2; length trt $20; trt=trt01a; output; trt='Total'; output; run; %end; %else %do; data &datain.; set &datain.; where &sar.='Y' and ATPTREF in &vac. ; run; data temp2; set &datain.; length trt $20; trt=trt01a; output; trt='Total'; output; run; data temp; set temp2; run; %end; %if &sec.='AR' %then %do; proc sort data=temp2 out=n1 nodupkey; by &subset. &byvar. subjid trt; where ATOXGRN^=.; run; proc sort data=temp out=any nodupkey; by &subset. &byvar. subjid trt; where ATOXGRN>0; run; %end; %if &sec.='LAR' %then %do; proc sort data=temp2 out=n1 nodupkey; by &subset. &byvar. subjid trt; where parcat1='LOCAL' and ATOXGRN^=.; run; proc sort data=temp out=any nodupkey; by &subset. &byvar. subjid trt; where parcat1='LOCAL' and ATOXGRN>0; run; %end; %if &sec.='SAR' %then %do; proc sort data=temp2 out=n1 nodupkey; by &subset. &byvar. subjid trt; where parcat1='SYSTEMIC' and ATOXGRN^=.; run; proc sort data=temp out=any nodupkey; by &subset. &byvar. subjid trt; where parcat1='SYSTEMIC' and ATOXGRN>0; run; %end; proc freq data=n1 noprint; table trt/norow nocol nopercent nocum out=denom; by &subset. &byvar.; run; proc freq data=any; table trt/norow nocol nopercent nocum out=num; by &subset. &byvar.; run; data ar; merge denom(rename=count=denom drop=percent) num(rename=count=n drop=percent); by &subset. &byvar. trt; run; data ar; set ar; if n=. then n=0; run; data clopper; set ar; n1=denom-n; rename n=Y n1=N; run; proc transpose data=clopper out=clopper_ar; by &subset. &byvar. trt ; var y n; run; proc freq data=clopper_ar; ods output binomialcls=ci; by &subset. &byvar. trt ; tables _name_/ nocum norow binomial (LEVEL="Y" ALL); weight col1 / zeros; run; data &dataout.; set ci; lowercl=lowercl*100; uppercl=uppercl*100; where type='Clopper-Pearson (Exact)'; drop table proportion type; run; %mend clopper;