Document text
file:///J/...atasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adc19ef-ve-cov-7pd2-p-sg-eval-sas.txt[7/5/2023 10:22:48 AM]************************************************************************************************
*****************;** Program Name : adc19ef-ve-cov-7pd2-p-sg-eval.sas **;** Date Created : 17Nov2021 **;
** Programmer Name:
**;
** Purpose : Create adc19ef-ve-cov-7pd2-p-sg-eval.html **;** Input data : ie, adsl, adc19ef **;** Output data : adc19ef-ve-cov-7pd2-p-sg-eval.html **;*****************************************************************************************************************;%let prot=/Volumes/app/cdars/prod/sites/cdars4/
prjC459/nda2_unblinded_esub/sbla1215_esub_adam/saseng/cdisc3_0;
libname dataprot"/Volumes/app/cdars/prod/sites/cdars4/prjC459/nda2_
unblinded_esub/sbla1215_esub_sdtm/saseng/cdisc3_0/data/sdtm"
access=readonly;libname datvprot "&prot./data_vai" access=readonly;%let codename=adc19ef-ve-cov-7pd2-p-sg-eval;options mprint symbolgen mlogic SPOOL nocenter missing=" ";
proc datasets library=WORK kill nolist nodetails;
quit;
%let outlog=&prot./analysis/eSUB/logs/&codename..log;
%let outtable=&prot./analysis/eSUB/output/&codename..html;
proc printto log="&outlog." new;
run;
*Formating;proc format;
value grpfmt 0="First COVID-19 occurrence from 7 days after Dose 2"
1="(*ESC*){nbspace 10}" 2="Overall" 3="(*ESC*){nbspace 10}" 4="Sex" 5="(*ESC*){nbspace 4}Male" 6="(*ESC*){nbspace 4}Female" 7="(*ESC*){nbspace 10}" 8="Race" 9="(*ESC*){nbspace 4}White" 10="(*ESC*){nbspace 4}Black or African American" 11="(*ESC*){nbspace 4}All others" 12="(*ESC*){nbspace 7}American Indian or Alaska native" 13="(*ESC*){nbspace 7}Asian" 14="(*ESC*){nbspace 7}Native Hawaiian or other Pacific Islander" 15="(*ESC*){nbspace 7}Multiracial" 16="(*ESC*){nbspace 7}Not reported" 17="(*ESC*){nbspace 10}" 18="Ethnicity" 19="(*ESC*){nbspace 4}Hispanic/Latino" 20="(*ESC*){nbspace 4}Non-Hispanic/non-Latino" 21="(*ESC*){nbspace 4}Not reported" 22="(*ESC*){nbspace 10}" 23="Country" 24="(*ESC*){nbspace 4}USA" 25="(*ESC*){nbspace 10}" 26="Comorbidities(*ESC*){super f}" 27="(*ESC*){nbspace 4}Yes" 28="(*ESC*){nbspace 4}No" 29="(*ESC*){nbspace 10}" 30="Obese(*ESC*){super g}" 31="(*ESC*){nbspace 4}Yes" 32="(*ESC*){nbspace 4}No" 33="(*ESC*){nbspace 10}" 34="Prior SARS-CoV-2 Status" 35="(*ESC*){nbspace 4}Positive at baseline(*ESC*){super h}" 36="(*ESC*){nbspace 8}Positive N-binding only" 37="(*ESC*){nbspace 8}Positive NAAT only"
(b) (4), (b)
(6)
FDA-CBER-2022-5812-0071806
file:///J/...atasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adc19ef-ve-cov-7pd2-p-sg-eval-sas.txt[7/5/2023 10:22:48 AM] 38="(*ESC*){nbspace 8}Positive NAAT and N-binding" 39="(*ESC*){nbspace 4}Negative at baseline but
positive prior to 7 days after Dose 2(*ESC*){super h}"
40="(*ESC*){nbspace 4}Negative prior to 7 days after Dose 2(*ESC*){super i}" 41="(*ESC*){nbspace 4}Unknown";run;
/*** Population Flag **/
proc sql; create table popf as select distinct usubjid, evaleffl, trt01pn, trt01p, NIGV1FL, NAATNFL from datvprot.adsl where evaleffl='Y' and PHASEN ne 1 and HIVFL='N' and agegr1n=1 order by usubjid;quit;
proc sql;
create table adc19ef as select * from datvprot.adc19ef order by usubjid;quit;
***** Derivation for flag needed in last block - START *******;
****get Exclusion Criterion 5 from IE dataset****;
proc sort data=dataprot.ie out=ie (keep=usubjid IESTRESC) nodupkey;
by usubjid; where IETESTCD="EX05A05" and IESTRESC="Y";run;
***get Positive NAAT at unscheduled visit up-to 7/14 days after Dose2***;data naat_un1;
set datvprot.adc19ef;
if paramcd="C19ONST" and avalc="POS" and vax101dt ^=. and vax102dt ^=. and
vax101dt < adt < sum(vax102dt, 7); NAAT_POS_UN="Y"; keep usubjid NAAT_POS_UN;run;
proc sort;
by usubjid;run;
data naat_un2;
set datvprot.adc19ef;
if paramcd="NAATRAD" and avalc="POS" and vax101dt ^=. and vax102dt ^=. and
vax101dt < adt < sum(vax102dt, 7); NAAT_POS_UN="Y"; keep usubjid NAAT_POS_UN;run;
proc sort;
by usubjid;run;
data naat_un3;
FDA-CBER-2022-5812-0071807
file:///J/...atasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adc19ef-ve-cov-7pd2-p-sg-eval-sas.txt[7/5/2023 10:22:48 AM] set datvprot.adc19ef;
if paramcd="RTCOV2NS" and avalc="POS" and vax101dt ^=. and vax102dt ^=. and
vax101dt < adt < sum(vax102dt, 7); NAAT_POS_UN="Y"; keep usubjid NAAT_POS_UN;run;
proc sort;
by usubjid;run;
data naat_un;
merge naat_un1 (in=a) naat_un2 (in=b) naat_un3 (in=c); by usubjid;
if a or b or c;
run;
proc sort nodupkey;
by usubjid;run;
data tpop;
merge adc19ef (in=a) popf (in=b) naat_un ie; by usubjid;
if a*b; if vrblngfl='N' or crd1ngfl='N' or C19ILHFL="Y" or IESTRESC='Y' then
do; sero_bl="POS"; ord=1; end; else if PDP27FL='Y' then do; sero_bl="NEG"; ord=3; end; else if vrblngfl='Y' and crd1ngfl='Y' and (NAAT_POS_UN="Y" or crd2ngfl='N') then do; sero_bl="NEU"; ord=2; end;
if sero_bl="" then
do; sero_bl="UNK"; ord=4; end;run;
***** Derivation for flag needed in last block - END *******;
FDA-CBER-2022-5812-0071808
file:///J/...atasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adc19ef-ve-cov-7pd2-p-sg-eval-sas.txt[7/5/2023 10:22:48 AM]/***** Total Population ****/
proc sql; create table dsin as select distinct subjid, trt01pn, trt01p, paramn, paramcd, param, pdrmupfl, adt, dvstdt, NIGV1FL, NAATNFL, aval, avalc, evaleffl, PDP27FL, pdrmufl, ILD27FL, filocrfl, usubjid, PDP214FL, ILD214FL, sero_bl, ord from tpop order by usubjid;quit;
proc sql noprint;
select bign into :n1 - :n2 from (select count(distinct usubjid) as bign, trt01pn from dsin group by trt01pn) order by trt01pn;quit;
/**** Read Subgroup Variables ****/
proc sql; create table adsl as select a.*, b.subjid, b.arace, b.aracen, b.sex, b.agegr1, b.agegr1n, b.racialdn, b.raciald, b.ethnic, b.ethnicn, b.country, b.age, b.agegr2, b.agegr2n, b.agetr01, b.bmicat, b.obesefl, b.COMBODFL, b.BMICATN, case when 12 <=b.age <=15 then 1 /*when 16 <= b.age <= 17 then 2*/ when 16 <=b.age <=55 then 3 else 4 end as agen from popf a inner join datvprot.adsl b on a.usubjid=b.usubjid order by usubjid;quit;
data dsn;
merge dsin (in=a) adsl (in=b); by usubjid;
if a*b; if /*(BMICATN = 4 and AGETR01 >=16) or*/
OBESEFL="Y" then obese="Y"; else obese="N";
if COMBODFL='Y' or /*(BMICATN = 4 and AGETR01 >=16) or*/
OBESEFL="Y" then comorbid="Y"; else comorbid="N";run;
%macro sbgrp (cond=, ord=, out=, grp=);
data dsin; set dsn; where &cond.; run;
/*** Subjects at Risk ****/
proc sql; create table riskp as select distinct usubjid, trt01pn, trt01p, aval from dsin where pdrmupfl="N" and paramcd in ("ST27PD") and aval > 0;
FDA-CBER-2022-5812-0071809
file:///J/...atasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adc19ef-ve-cov-7pd2-p-sg-eval-sas.txt[7/5/2023 10:22:48 AM] quit;
/*** If there are no subjects in a subgroup, populate 0 ****/
proc sql noprint; select count(*) into :tobs from riskp; quit;
%put &tobs.; %if &tobs > 0 %then
%do;
data dmny;
do trt01pn=8 to 9; output; end; run;
proc sql;
create table n2 as select count(distinct usubjid) as n2, trt01pn from riskp group by trt01pn order by trt01pn; quit;
data n2;
merge dmny (in=a)n2; by trt01pn;
if a; if missing(n2) then
n2=0; run;
/***** Events (n1) ****/
proc sql; create table evnts as select distinct usubjid, param, avalc, trt01pn from dsin where paramcd in ("C19ONST") and upcase(ILD27FL)="Y" and upcase(FILOCRFL)="Y" and ((not missing(DVSTDT) and adt <=DVSTDT) or missing(DVSTDT)) and usubjid in (select distinct usubjid from riskp) order by usubjid; quit;
proc sql;
create table evtn as select count(distinct usubjid) as smln, trt01pn from evnts group by trt01pn order by trt01pn; quit;
data evtn;
merge dmny (in=a) evtn; by trt01pn;
if a;
if missing(smln) then
FDA-CBER-2022-5812-0071810
file:///J/...atasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adc19ef-ve-cov-7pd2-p-sg-eval-sas.txt[7/5/2023 10:22:48 AM] smln=0;
run;
/*** Surveillance Time ****/
proc sql; create table st as select distinct usubjid, aval, trt01pn, trt01p, paramcd from dsin where paramcd in ("ST27PD") and usubjid in (select distinct usubjid from riskp); quit;
proc sql;
create table riskn as select a.*, b.ptyrs from n2 a inner join(select (sum(aval)/365.25/1000) as ptyrs, trt01pn from st group by trt01pn) b on a.trt01pn=b.trt01pn; quit;
data riskn;
merge dmny (in=a) riskn; by trt01pn;
if a; if missing(ptyrs) then
ptyrs=0;
if missing(n2) then
n2=0; run;
proc sql;
create table &out._pt as select strip(put(a.smln, best.)) as evtn, b.*, smln/ptyrs as ir, a.smln, (put(ptyrs, 7.3) || " (" || strip(put(n2, best.))) || ")" as ptyb from evtn a left join riskn b on a.trt01pn=b.trt01pn; quit;
/**** Total cases ****/
proc sql noprint; select sum(smln) into :ncases from &out._pt; quit;
%let ncases = &ncases.; /***** Cases in Vacination Group ****/
proc sql noprint; select smln into :nv1-:nv2 from &out._pt; quit;
%let alpha=0.05;
%let nv1 = &nv1; %let nv2 = &nv2; %let ncases = &ncases; %put No. of Cases in Vacination group are &nv1.;
%put Total No. of Cases in the trial are &ncases.;
FDA-CBER-2022-5812-0071811
file:///J/...atasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adc19ef-ve-cov-7pd2-p-sg-eval-sas.txt[7/5/2023 10:22:48 AM] proc transpose data=&out._pt out=&out._tr prefix=trt;
var ptyrs; id trt01pn; run;
%put &nv1 &nv2; data &out._tr;
set &out._tr;
if &nv1 > 0 or &nv2 > 0 then
do; r=trt8/trt9; n_p=&ncases - &nv1.; ir_v=&nv1/trt8; ir_p=n_p/trt9; alpha=&alpha.; length ve lcl ucl $25.; VE=strip(put(100*(1-ir_v/ir_p), 10.1)); fu=finv(1- alpha/2, 2*(&nv1.+1), 2*N_P); ucl_pi=(&nv1 +1)*fu/(N_P + (&nv1.+1)*fu); fl=finv(1-alpha/2, 2*(N_P+1), 2*&nv1.);
if &nv1=0 then
lcl_pi=0; else lcl_pi=&nv1./(&nv1. + fl*(N_P+1)); ucl_theta=ucl_pi/(r*(1-ucl_pi)); lcl_theta=lcl_pi/(r*(1-lcl_pi)); qu=100*(1 - lcl_theta); ql=100*(1 - ucl_theta);
/* vci = "(" || strip(put(ql,8.1)) || ", " || strip(put(qu,8.1)) || ")"; */
if not missing(ql) then lcl=strip(put(ql, 8.1)); else lcl="-(*ESC*){unicode 221e}";
if not missing(qu) then
ucl=strip(put(qu, 8.1)); else ucl='NE'; vci="(" || strip(lcl) || ", " || strip(ucl) || ")"; end; else do; ve="NE"; call missing(pr, vci); end; grp=&grp; ord=⩝ *drop ql qh irr qu_:;
FDA-CBER-2022-5812-0071812
file:///J/...atasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adc19ef-ve-cov-7pd2-p-sg-eval-sas.txt[7/5/2023 10:22:48 AM] if strip(ve)='.' then
do;
ve="-(*ESC*){unicode 221e}"; vci="(NA, NA)"; end; run;
proc transpose data=&out._pt out=trn prefix=trtn;
var evtn; id trt01pn; run;
proc transpose data=&out._pt out=try prefix=trty;
var ptyb; id trt01pn; run;
proc sql;
create table f_&out. as select a.*, b.*, c.* from trn (drop=_name_) a, try (drop=_name_) b, &out._tr (drop=_name_) c; quit;
%end;
%else %do;
data f_&out.;
length ve vci trtn8 trtn9 $50 trty8 trty9 $100; grp=&grp; ord=&ord.; ve="NE"; vci=" "; trtn8="0"; trtn9="0"; trty8=" 0.00 (0)"; trty9=" 0.00 (0)"; run;
%end;
%mend sbgrp;
%sbgrp (cond=%str(), ord=0, grp=1, out=fst);
**added to display overall count in first row***;%sbgrp (cond=%str(), ord=2, grp=1, out=ovr);*** Overall ***;%sbgrp (cond=%str(sex in ('M')), ord=5, grp=2, out=sx1);*** Male ***;%sbgrp (cond=%str(sex in ('F')), ord=6, grp=2, out=sx2);*** Female ***;%sbgrp (cond=%str(aracen in (1)), ord=9, grp=3, out=rc1);*** White ***;%sbgrp (cond=%str(aracen in (2)), ord=10, grp=3, out=rc2);*** Black or Afri Amer ***;
%sbgrp (cond=%str(aracen not in (1,2)), ord=11, grp=3, out=rc8);
FDA-CBER-2022-5812-0071813
file:///J/...atasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adc19ef-ve-cov-7pd2-p-sg-eval-sas.txt[7/5/2023 10:22:48 AM]*** All Others ***;
%sbgrp (cond=%str(aracen in (3)), ord=12, grp=3, out=rc3);
*** American ***;%sbgrp (cond=%str(aracen in (4)), ord=13, grp=3, out=rc4);*** Asian ***;%sbgrp (cond=%str(aracen in (5)), ord=14, grp=3, out=rc5);*** Hawaii ***;%sbgrp (cond=%str(aracen in (6)), ord=15, grp=3, out=rc6);*** Multi ***;%sbgrp (cond=%str(aracen in (7)), ord=16, grp=3, out=rc7);*** Not reported ***;%sbgrp (cond=%str(ethnicn in (1)), ord=19, grp=4, out=et1);*** Hispanic/Latino ***;%sbgrp (cond=%str(ethnicn in (2)), ord=20, grp=4, out=et2);*** Non-Hispanic/non-Latino ***;%sbgrp (cond=%str(ethnicn in (3)), ord=21, grp=4, out=et3);*** Not reported ***;%sbgrp (cond=%str(country in ("USA")), ord=24, grp=5, out=ct6);*** USA ***;%sbgrp (cond=%str(OBESE="Y"), ord=27, grp=6, out=ob1);*** Obese="Yes" ***;%sbgrp (cond=%str(OBESE="N"), ord=28, grp=6, out=ob2);*** Obese="No" ***;%sbgrp (cond=%str(comorbid="Y"), ord=31, grp=7, out=cm1);*** Comorbidities="Yes"***;%sbgrp (cond=%str(comorbid="N"), ord=32, grp=7, out=cm2);*** Comorbidities="No" ***;%sbgrp (cond=%str(sero_bl in ("POS")), ord=35, grp=8, out=sr1);*** Positive at baseline ***;%sbgrp (cond=%str(sero_bl in ("POS") and (NIGV1FL = "N" and NAATNFL ne "N")), ord=36, grp=8, out=sr11);*** Positive N-binding only ***;%sbgrp (cond=%str(sero_bl in ("POS") and (NIGV1FL ne "N" and NAATNFL = "N")), ord=37, grp=8, out=sr12);*** Positive NAAT only ***;%sbgrp (cond=%str(sero_bl in ("POS") and (NIGV1FL = "N" and NAATNFL = "N")), ord=38, grp=8, out=sr13);*** Positive NAAT and N-binding ***;%sbgrp (cond=%str(sero_bl in ("NEU")), ord=39, grp=8, out=sr2);*** Negative at baseline but positive prior to 7 days after Dose 2 ***;%sbgrp (cond=%str(sero_bl in ("NEG")), ord=40, grp=8, out=sr3);*** Negative prior to 7 days after Dose ***;%sbgrp (cond=%str(sero_bl in ("UNK")), ord=41, grp=8, out=sr4);*** Unknown ***;
data final;
length vci $100. trtn8 trtn9 $50.; set f_:;run;
proc sort data=final;
by ord grp;run;
FDA-CBER-2022-5812-0071814
file:///J/...atasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adc19ef-ve-cov-7pd2-p-sg-eval-sas.txt[7/5/2023 10:22:48 AM]data dummy;
do ord=0 to 41;
output; end;run;
data dummy;
set dummy;
if 0<=ord<=2 then
grp=1;
if 3<=ord<=6 then
grp=2;
if 7<=ord<=16 then
grp=3;
if 17<=ord<=21 then
grp=4;
if 22<=ord<=24 then
grp=5;
if 25<=ord<=38 then
grp=6;
if 29<=ord<=32 then
grp=7;
if 33<=ord<=41 then
grp=8;run;
proc sort;
by ord grp;run;
data rf;
merge dummy (in=a) final; by ord grp;
if a;
text=put(ord, grpfmt.);
if strip(trtn8)='0' and strip(trtn9)='0' then
delete;
if ord=0 then
do; trtn8=''; trty8=''; trtn9='';
trty9='';
FDA-CBER-2022-5812-0071815
file:///J/...atasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adc19ef-ve-cov-7pd2-p-sg-eval-sas.txt[7/5/2023 10:22:48 AM] ve='';
vci='';
end;run;
/* Output report */
ods escapechar="~";ods html file="&outtable.";title1 "Vaccine Efficacy (*ESC*){unicode 2013} First COVID-19 Occurrence From 7 Days After Dose 2, by Subgroup";title2 "(*ESC*){unicode 2013} Blinded Placebo-Controlled Follow-up Period";title3 "(*ESC*){unicode 2013} Subjects 12 Through 15 Years of Age and With or Without Evidence of Infection Prior to 7 Days After Dose 2";title4 "(*ESC*){unicode 2013} Evaluable Efficacy (7 Days) Population";footnote1 "Abbreviations: N-binding = SARS-CoV-2 nucleoprotein(*ESC*){unicode 2013}binding; NAAT = nucleic acid amplification test; ~nSARS-CoV-2 = severe acute respiratory syndrome coronavirus 2; VE = vaccine efficacy.";footnote2 "a.(*ESC*){nbspace 5}N = number of subjects in the specified group. ~nb.(*ESC*){nbspace 5}n1 = Number of subjects meeting the endpoint definition.";footnote3 "c.(*ESC*){nbspace 5}Total surveillance time in 1000 person-years for the given endpoint across all subjects within each group at risk for the endpoint. Time period for COVID-19 case accrual is from 7 days after Dose 2 to the end of the surveillance period.";footnote4 "d.(*ESC*){nbspace 5}n2 = Number of subjects at risk for the endpoint. ~ne.(*ESC*){nbspace 5}Confidence interval (CI) for VE is derived based on the Clopper and Pearson method adjusted for surveillance time.";footnote5 "f.(*ESC*){nbspace 5}Comorbidities are defined as having at least one of the Charlson comorbidity index category or obesity (BMI (*ESC*){unicode 2265}95(*ESC*){super th} percentile).";footnote6 "g.(*ESC*){nbspace 5}Obese is defined as BMI (*ESC*){unicode 2265}95(*ESC*){super th} percentile from the growth chart. Refer to the CDC growth charts at https://www.cdc.gov/growthcharts/html_charts/bmiagerev.htm.";footnote7 "h.(*ESC*){nbspace 5}Negative N-binding antibody result and negative NAAT result at Visit 1, positive NAAT result at Visit 2 or at unscheduled visit, if any, prior to 7 days after Dose 2.";footnote8 "i.(*ESC*){nbspace 5}Negative N-binding antibody result at Visit 1, negative NAAT result at Visit 1 and Visit 2, and negative NAAT result at unscheduled visit, if any, prior to 7 days after Dose 2.";
proc report data=rf nowd headline headskip split="*"
style(report)=[borderwidth=10];
column grp ord (text ("Vaccine Group (as Randomized)~{line}" ("BNT162b2 (30 ~{unicode 03BC}g)*(N~{super
a}=&n1.)"
trtn8 trty8) ("Placebo*(N~{super a}=&n2.)" trtn9 trty9)) ve vci);
define ord / display noprint;
define grp / display noprint;
define text / "Efficacy Endpoint*~{nbspace 5}Subgroup" flow
style(header)=[just=l] style(column)=[cellwidth=3in just=l];
define trtn8 / " n1~{super b}" style(column)=[cellwidth=0.8in just=c];
define trty8 / "Surveillance*Time~{super c} (n2~{super d})"
style(column)=[cellwidth=1.5in just=c];
define trtn9 / " n1~{super b}" style(column)=[cellwidth=0.8in just=c];
define trty9 / "Surveillance*Time~{super c} (n2~{super d})"
style(column)=[cellwidth=1.5in just=c];
define ve / " VE (%)" style(column)=[cellwidth=0.5in just=c];
define vci / "(95% CI~{super e})" style(column)=[cellwidth=0.5in just=c];
run;
ods markup close;
ods HTML close;
FDA-CBER-2022-5812-0071816
file:///J/...atasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adc19ef-ve-cov-7pd2-p-sg-eval-sas.txt[7/5/2023 10:22:48 AM]proc printto;
run;
FDA-CBER-2022-5812-0071817