Document text
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]************************************************************************************************
*****************;** Program Name : adsl.sas **;** Date Created : 17Nov2021 **;** Programmer Name: **;
** Purpose : Create adsl dataset **;** Input data : dm suppdm ex suppex ds suppds is co lb cm ie dv suppdv vs sv mb mh face ce ho suppho **;** External file : ../prjC459/nda2_unblinded_esub/sbla1215_esub_adam/saseng/cdisc3_0/output/xpt **;** Output data : adsl.sas7bdat **;*****************************************************************************************************************;%let oprot=/Volumes/app/cdars/prod/sites/cdars4/
prjC459/nda2_unblinded_esub/sbla1215_esub_sdtm/saseng/cdisc3_0/data/
sdtm;%let protori=/Volumes/app/cdars/prod/sites/cdars4/prjC459/nda2_unblinded_esub/sbla1215_esub_adam/saseng/cdisc3_0;%let prot=/Volumes/app/cdars/prod/sites/cdars4/prjC459/nda2_unblinded_esub/sbla1215_esub_adam/saseng/cdisc3_0/analysis/eSUB;*Path for external files;%let expath=/Volumes/app/cdars/prod/sites/cdars4/prjC459/nda2_unblinded_esub/sbla1215_esub_adam/saseng/cdisc3_0/output/xpt;
libname dataprot "&oprot." access=readonly;
libname datvprot "&protori./data_vai" access=readonly;libname datvout "&prot./data_vai";
*Insert the date of snapshot;
%let cutoff2=02SEP2021;
proc printto print="&prot./output/adsl.rpt"
log="&prot./logs/adsl.log" new;run;******************************************************************************************;* Clean *;******************************************************************************************;
proc delete data=work._all_;
run;
******************************************************************************************;
* Format *;******************************************************************************************;
proc format;
invalue sex "M"=1 "F"=2; invalue race "WHITE"=1 "BLACK OR AFRICAN AMERICAN"=2 "AMERICAN INDIAN OR ALASKA NATIVE"=3 "ASIAN"=4 "NATIVE HAWAIIAN OR OTHER PACIFIC ISLANDER"=5 "MULTIPLE"=6 "NOT REPORTED"=7; invalue ethnic "HISPANIC OR LATINO"=1 "NOT HISPANIC OR LATINO"=2 "NOT REPORTED"=3 "UNKNOW"=4; invalue aethnic "HISPANIC OR LATINO"=1 "NOT HISPANIC OR LATINO"=2
(b) (4), (b)
(6)
FDA-CBER-2022-5812-0072875
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] "NOT REPORTED"=3 "UNKNOW"=4;
invalue arace "WHITE"=1 "BLACK OR AFRICAN AMERICAN"=2
"AMERICAN INDIAN OR ALASKA NATIVE"=3 "ASIAN"=4 "NATIVE HAWAIIAN OR OTHER PACIFIC ISLANDER"=5 "MULTIRACIAL"=6 "NOT REPORTED"=7 "UNKNOWN"=8; invalue RaceGr1x "WHITE"=1 "BLACK OR AFRICAN AMERICAN"=2 "ALL OTHERS"=3; invalue RacialD "JAPANESE"=5 "OTHER"=999; invalue RANDAGE "12-15 Years"=1 "16-55 Years"=2 "18-55 Years"=3 "65-85 Years"=4 ">55 Years"=5; invalue INFAGE "12-15 Years"=1 "16-55 Years"=2 "18-55 Years"=3 "65-85 Years"=4 ">55 Years"=5; value $stat 'UNK'='1' 'UNKNOWN'='1' 'N'='2' 'NEG'='2' 'IND'='3' 'Y'='4' 'POS'='4'; value stat 0=' ' 1='UNK' 2='NEG' 3='IND' 4='POS'; invalue trtfmt "BNT162b1 Phase 1 (10 mcg)"=1 "BNT162b1 Phase 1 (20 mcg)"=2 "BNT162b1 Phase 1 (30 mcg)"=3 "BNT162b1 Phase 1 (100/10 mcg)"=4 "BNT162b2 Phase 1 (10 mcg)"=5 "BNT162b2 Phase 1 (20 mcg)"=6 "BNT162b2 Phase 1 (30 mcg)"=7 "BNT162b2 Phase 2/3 (30 mcg)"=8 "Placebo"=9 "BNT162b2-Naive Participants - BNT162b2SA (30 mcg) 2 Doses"=10 "BNT162b2 (30 mcg, 1 Dose)"=11 "BNT162b2SA (30 mcg, 1 Dose)"=12 "BNT162b2SA (30 mcg, 2 Doses)"=13 "BNT162b2 (5 mcg, 1 Dose)"=14 "BNT162b2 (10 mcg, 1 Dose)"=15 "Indeterminate"=98;run;
******************************************************************************************;
* Read in source DM/DS/EX SDTM datasets. *;******************************************************************************************;
Data DmSet;
Set dataprot.dm;Run;
Data DsSet;
Set dataprot.ds;Run;
Data ExSet;
Set dataprot.Ex;Run;
data prd2;
set ExSet;
if (index(visit, "_VAX3") or index(visit, "_VAX4") or
visit='V303_MONTH1_POSTVAX3') and exstdtc ne "";
proc sort;
by usubjid visitnum;run;
proc sort data=prd2 nodupkey;
by usubjid;run;
FDA-CBER-2022-5812-0072876
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]proc sql UNDO_POLICY=NONE;
create table ExSet as select a.*, case when not missing(b.exstdtc) and not
missing(a.exstdtc) and .<input(scan(a.exstdtc, 1, "T"), yymmdd10.)<input(scan(b.exstdtc, 1, "T"), yymmdd10.) then "Double Blinded Period" when not missing(a.exstdtc) and missing(b.exstdtc) then "Double Blinded Period" else "Open Label Period" end as PERIOD, case when (calculated period)="Double Blinded Period" then 1 when (calculated period)="Open Label Period" then 2 end as PERIODN, case when not missing(a.extrt) and a.extrt ne "INDETERMINATE" then a.extrt else "ZZZZZZ" end as _extrt_ from ExSet a left join prd2 b on a.usubjid=b.usubjid order by periodn, period, usubjid, _extrt_;quit;
data ExSet;
set ExSet; by periodn period usubjid _extrt_; retain ACTDRUG;
if first.usubjid then
ACTDRUG=extrt;
if index(ACTDRUG, "BNT")=0 then
ACTDRCD=upcase(ACTDRUG); else if not missing(ACTDRUG) then ACTDRCD=substr(upcase(ACTDRUG), length(ACTDRUG)-1, 2);run;
proc sort data=DsSet out=randcode nodupkey;
by usubjid; where dsrefid ne "";run;
proc sql undo_policy=none;
create table DmSet as select a.*, b.dsrefid as tmpid, c.tmpdtc, d.qval as DSRANGRP from DmSet a left join randcode b on a.usubjid=b.usubjid left join (select distinct usubjid, max(exstdtc) as tmpdtc from ExSet where not missing(exstdtc)) c on a.usubjid=c.usubjid left join dataprot.suppds(where=(qnam="DSRANGRP")) d on a.usubjid=d.usubjid order by usubjid;quit;
/*Assign dose level variables*/
data DmSet; set DmSet; length dosalvl dosplvl $100; label DOSPLVL="Planned Dosing Level" DOSPLVLN="Planned Dosing Level (N)" DOSALVL="Actual Dosing Level" DOSALVLN="Actual Dosing Level (N)";
if tmpid ne "" then
do;
if armcd="PLACEBO" and not missing(dsrangrp) then
do;
dosplvl="Placebo";
FDA-CBER-2022-5812-0072877
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] dosplvln=6;
end;
else do; _dosplvl=scan(scan(DSRANGRP, 3, ","), 1, " "); dosplvl=tranwrd(tranwrd(scan(scan(scan(DSRANGRP, 3, ","), 2, "("), 1, ")"), "mcg", " (*ESC*){unicode 03BC}g"), "100", "100 (*ESC*){unicode 03BC}g/10");
if _dosplvl="TBD" then
dosplvln=0;
if _dosplvl="Low" then
dosplvln=1;
if _dosplvl="Low-Mid" then
dosplvln=2;
if _dosplvl="Medium" then
dosplvln=3;
if _dosplvl="Mid-High" then
dosplvln=4;
if _dosplvl="High" then
dosplvln=5; end;
if not missing(tmpdtc) then
do; dosalvl=dosplvl; dosalvln=dosplvln; end; end;
if missing(arm) then
do; arm='BLINDED THERAPY'; armcd='Z'; actarm='BLINDED THERAPY'; actarmcd='Z'; end;run;
*****************************************************************;
*Reading INPUT SDTM and Supplemental Datasets *;*Merge DM and SUPPDM*;*****************************************************************;
data _spmdel_supp_dsin_subset;
set dataprot.suppdm;run;
data _spmdel_sdtm_ds;
FDA-CBER-2022-5812-0072878
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] set DmSet;
run;
data _spmdel_supp_dsin_subset_idvar1;
set _spmdel_supp_dsin_subset; where idvar is missing;run;
proc sort data=_spmdel_supp_dsin_subset_idvar1;
by studyid usubjid idvar idvarval; quit;
proc transpose data=_spmdel_supp_dsin_subset_idvar1
out=_spmdel_supp_dsin_idvar1_h; by studyid usubjid idvar idvarval; id qnam; idlabel qlabel; var qval; quit;
data _spmdel_suppds1 (drop=idvar idvarval _NAME_ _LABEL_);
set _spmdel_supp_dsin_idvar1_h;
if idvar='';
run;
proc sort data=_spmdel_sdtm_ds out=_ds1;
by STUDYID USUBJID;run;
proc sort data=_spmdel_suppds1 out=_ds2;
by STUDYID USUBJID;run;
data _spmdel_sdtm_temp_out1;
merge _ds1(in=d1) _ds2(in=d2); by STUDYID USUBJID;
if d1;
run;
data DmSet;
set _spmdel_sdtm_temp_out1;run;
*****************************************************************;
*Reading INPUT SDTM and Supplemental Datasets *;*Merge EX and SUPPEX*;*****************************************************************;
data _spmdel_supp_dsin_subset;
set dataprot.suppex; where;
run;
FDA-CBER-2022-5812-0072879
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]data _spmdel_sdtm_ds;
set ExSet;run;
data _spmdel_supp_dsin_subset_idvar1;
set _spmdel_supp_dsin_subset; where idvar="EXSEQ";run;
proc sort data=_spmdel_supp_dsin_subset_idvar1;
by studyid usubjid idvar idvarval; quit;
proc transpose data=_spmdel_supp_dsin_subset_idvar1
out=_spmdel_supp_dsin_idvar1_h; by studyid usubjid idvar idvarval; id qnam; idlabel qlabel; var qval; quit;
data _spmdel_temp(keep=EXSEQ);
set _spmdel_sdtm_ds;run;
data _spmdel_suppds1 (drop=idvar idvarval _NAME_ _LABEL_);
set _spmdel_supp_dsin_idvar1_h;
if idvar="EXSEQ";
EXSEQ=input(idvarval, best12.);run;
proc sort data=_spmdel_sdtm_ds out=_ds1;
by STUDYID USUBJID EXSEQ;run;
proc sort data=_spmdel_suppds1 out=_ds2;
by STUDYID USUBJID EXSEQ;run;
data _spmdel_sdtm_temp_out1;
merge _ds1(in=d1) _ds2(in=d2); by STUDYID USUBJID EXSEQ;
if d1;
run;
data ExSet;
set _spmdel_sdtm_temp_out1;run;
*****************************************************************;
*Reading INPUT SDTM and Supplemental Datasets *;
FDA-CBER-2022-5812-0072880
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]*Merge DS and SUPPDS*;
*****************************************************************;
data _spmdel_supp_dsin_subset;
set dataprot.suppds;run;
data _spmdel_sdtm_ds;
set DsSet;run;
data _spmdel_supp_dsin_subset_idvar1;
set _spmdel_supp_dsin_subset; where idvar="DSSEQ";run;
proc sort data=_spmdel_supp_dsin_subset_idvar1;
by studyid usubjid idvar idvarval; quit;
proc transpose data=_spmdel_supp_dsin_subset_idvar1
out=_spmdel_supp_dsin_idvar1_h; by studyid usubjid idvar idvarval; id qnam; idlabel qlabel; var qval; quit;
data _spmdel_temp(keep=DSSEQ);
set _spmdel_sdtm_ds;run;
data _spmdel_suppds1 (drop=idvar idvarval _NAME_ _LABEL_);
set _spmdel_supp_dsin_idvar1_h;
if idvar="DSSEQ";
DSSEQ=input(idvarval, best12.);run;
proc sort data=_spmdel_sdtm_ds out=_ds1;
by STUDYID USUBJID DSSEQ;run;
proc sort data=_spmdel_suppds1 out=_ds2;
by STUDYID USUBJID DSSEQ;run;
data _spmdel_sdtm_temp_out1;
merge _ds1(in=d1) _ds2(in=d2); by STUDYID USUBJID DSSEQ;
if d1;
run;
FDA-CBER-2022-5812-0072881
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]data DsSet;
set _spmdel_sdtm_temp_out1;
run;
*******************************************************************************;
* Derive the date/time variables. *;*******************************************************************************;
proc sort data=ExSet out=_ds1;
by UsubjId;run;
proc sort data=DmSet out=_ds2;
by UsubjId;run;
data ExSet;
merge _ds1(in=d1) _ds2(in=d2 drop=domain); by UsubjId;
if d1;
run;
data ExSet;
set ExSet; ExStDt=input(ExStDtc, ??is8601da.); format ExStDt date9.; ExEnDt=input(ExEnDtc, ??is8601da.); format ExEnDt date9.; ExStTm=.;
if length(strip(ExStDtc))>12 then
do; ExStTm=input(substr(ExStDtc, 12), ??is8601tm.); end; format ExStTm time8.; ExEnTm=.;
if length(strip(ExEnDtc))>12 then
do; ExEnTm=input(substr(ExEnDtc, 12), ??is8601tm.); end; format ExEnTm time8.;run;
data DmSet;
set DmSet;
if ^missing(BrthDtc) then
do; length yr $4 mm dd $2; yr=substr(BrthDtc, 1, 4); mm=substr(BrthDtc, 6, 2);
dd=substr(BrthDtc, 9, 2);
FDA-CBER-2022-5812-0072882
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] if yr ne ' ' then
do; dflag=' ';
if (dd eq " " or dd eq "-T") and mm ne " " then
do; dd='01'; dflag='D'; end;
if mm eq " " or mm eq "--" then
do; mm='01'; dd='01'; dflag='M'; end; newdate=(trim(left(yr))||'-'||trim(left(mm))||'-'||trim(left(dd))); BrthDt=input(newdate, ??is8601da.); format BrthDt date9.; BrthDtF=dflag; end; drop yr mm dd dflag newdate; end; RfxStDt=input(RfxStDtc, ??is8601da.); format RfxStDt date9.; RfxEnDt=input(RfxEnDtc, ??is8601da.); format RfxEnDt date9.; RfStDt=input(RfStDtc, ??is8601da.); format RfStDt date9.; RfEnDt=input(RfEnDtc, ??is8601da.); format RfEnDt date9.; RfPEnDt=input(RfPEnDtc, ??is8601da.); format RfPEnDt date9.; RfIcDt=input(RfIcDtc, ??is8601da.); format RfIcDt date9.; RfxStTm=.;
if length(strip(RfxStDtc))>12 then
do; RfxStTm=input(substr(RfxStDtc, 12), ??is8601tm.); end; format RfxStTm time8.; RfxEnTm=.;
if length(strip(RfxEnDtc))>12 then
do; RfxEnTm=input(substr(RfxEnDtc, 12), ??is8601tm.); end; format RfxEnTm time8.; RfStTm=.;
if length(strip(RfStDtc))>12 then
do;
FDA-CBER-2022-5812-0072883
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] RfStTm=input(substr(RfStDtc, 12), ??is8601tm.);
end;
format RfStTm time8.; RfEnTm=.;
if length(strip(RfEnDtc))>12 then
do; RfEnTm=input(substr(RfEnDtc, 12), ??is8601tm.); end; format RfEnTm time8.; ;run;
data DsSet;
Set DsSet; DsStDT=input(DsStDtc, ??is8601da.); format DsStDT date9.; DsDt=input(DsDtc, ??is8601da.); format DsDt date9.;run;
******************************************************************************************;
* Unique treatment group information *;******************************************************************************************;
Proc Sort Data=DmSet Out=UniqArm(Keep=Arm ArmCd) Nodupkey;
By Arm Armcd; Where upcase(strip(ArmCd)) not in ("SCRNFAIL", "NOTASSGN", " ");Run;
Proc Sort Data=ExSet Out=UniqTrtVar(Keep=EXTRT) Nodupkey;
By EXTRT; Where upcase(strip(EXTRT)) not in (" ");Run;
Data UniqTrtVar;
Length _TrtPhase $20. _TrtVarOrd $20.; Set UniqTrtVar; _TrtVar=catx(" ", EXTRT); _TrtVarOrd=byte(64+_n_); _TrtPhase="ACTIVE";Run;
Data UniqArm;
Length _TrtPhase $20. _TrtVarOrd $20.; Set Uniqarm; _TrtPhase="RANDOM"; _TrtVar=Arm; _TrtVarOrd=ArmCd;Run;
Data UniqTrtVarArm;
Length _TrtVar _TrtVar2 $200.;
Set UniqTrtvar UniqArm;
FDA-CBER-2022-5812-0072884
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] _TrtVar2=_TrtVar;
Run;
data TrtMapTxt;
set UniqTrtVarArm;run;
Proc Sort data=TrtMapTxt;
By _TrtVar _TrtPhase;Run;
******************************************************************************************;
* Individual's exposure information *;******************************************************************************************;
Data ExSet;
Set ExSet; _TrtGrpC=catx(" ", EXTRT);Run;
Proc Sort data=ExSet Out=ExTmChk;
By ExStTm ExEnTm; Where ^Missing(ExStTm) or ^Missing(ExEnTm);Run;
Data ExSet(Where=(nmiss(ExStDt, ExEnDt)=0)) ExDtmMiss;
Set ExSet;
If Nmiss(ExStDt, ExEnDt, ExStTm, ExEnTm)>=1 then
output ExDtmMiss; Output ExSet;Run;
Proc Sql NoPrint;
Create table ExTemp1 as Select a.*, b._TrtVarOrd as _TrtGrpD From ExSet as a Left Join UniqTrtVarArm(where=(upcase(strip(_TrtPhase))="ACTIVE")) as b On a._TrtGrpC=b._TrtVar;Quit;
Proc Sql NoPrint;
Create table ExTemp2 as Select a.*, b._TrtVar2, b._TrtVarOrd From ExTemp1 as a Left Join TrtMapTxt(where=(upcase(strip(_TrtPhase))="ACTIVE")) as b On a._TrtGrpC=b._TrtVar;Quit;
Data ExSet;
Set ExTemp2; _TrtGrpC=ACTDRUG; _TrtGrpD=ACTDRCD;Run;
Proc Sql NoPrint;
Create table TrtxxP_A_N as Select distinct _TrtGrpD From ExSet Order By
_TrtGrpD;
FDA-CBER-2022-5812-0072885
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]Quit;
Data TrtxxP_A_N;
Set TrtxxP_A_N; FmtName="TrtNFmt"; Start=_TrtGrpD;End=_TrtGrpD;Label=_n_;Type="I";Run;
Proc Format Lib=Work CntlIn=TrtxxP_A_N;
Run;
Proc Sql NoPrint;
Create table TrtGrpMac as Select distinct _TrtGrpD, _TrtGrpC From ExSet Order By _TrtGrpD;Quit;
Proc Sort Data=ExSet Out=ExTrt(Keep=Usubjid ExStDt ExEnDt ExStTm ExEnTm
_TrtGrpC _TrtGrpD) Nodupkey; By Usubjid ExStDt ExStTm ExEnDt ExEnTm _TrtGrpD _TrtGrpC;Run;
Data ExTrt;
Retain _TrtGrpN 0; Set ExTrt; By Usubjid _TrtGrpD _TrtGrpC NotSorted;
If First._TrtGrpC then
do;
If First.Usubjid then
_TrtGrpN=0; _TrtGrpN=_TrtGrpN+1; End;run;
Proc Sort Data=ExTrt Out=ExTrtA;
By Usubjid _TrtGrpN;Run;
Proc Sort Data=ExTrt Out=ExTrtSt;
By Usubjid _TrtGrpN ExStDt ExStTm;Run;
Proc Sort Data=ExTrt Out=ExTrtEt;
By Usubjid _TrtGrpN ExEnDt ExEnTm;Run;
Data ExTrtA;
Set ExTrtA; By UsubjId _TrtGrpN;
_xx=Strip(Put(_TrtGrpN, z2.));
FDA-CBER-2022-5812-0072886
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] If First._TrtGrpN then
do; _TrtxxA=Cats("TRT", _xx, "A"); Output ExTrtA; End;Run;
Data ExTrtSt ExTrtSdt(Keep=Usubjid TrtSdt TrtStm);
Set ExTrtSt; By UsubjId _TrtGrpN; _xx=Strip(Put(_TrtGrpN, z2.));
If First._TrtGrpN then
do; _TrxxSdt=Cats("TR", _xx, "SDT"); _TrxxStm=Cats("TR", _xx, "STM"); Output ExTrtSt; End;
If First.UsubjId then
do; TrtSdt=ExStDt; TrtStm=ExStTm; Output ExTrtSdt; End;Run;
Data ExTrtEt ExTrtEdt(Keep=UsubjId TrtEdt TrtEtm);
Set ExTrtEt; By UsubjId _TrtGrpN; _xx=Strip(Put(_TrtGrpN, z2.));
If Last._TrtGrpN then
do; _TrxxEdt=Cats("TR", _xx, "EDT"); _TrxxEtm=Cats("TR", _xx, "ETM"); Output ExTrtEt; End;
If Last.UsubjId then
do; TrtEdt=ExEnDt; TrtEtm=ExEnTm; Output ExTrtEdt; End;Run;
Proc Transpose Data=ExTrtA Out=ExTrtxxA;
By UsubjId; Id _TrtxxA; Var _TrtGrpC;Run;
FDA-CBER-2022-5812-0072887
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]Proc Transpose Data=ExTrtA Out=ExTrtxxA2 Prefix=_ActArm;
By UsubjId;
Id _TrtGrpN; Var _TrtGrpC;Run;
Proc Transpose Data=ExTrtA Out=ExTrtxxD Prefix=_ActArmCd;
By UsubjId; Id _TrtGrpN; Var _TrtGrpD;Run;
Proc Transpose Data=ExTrtSt Out=ExTrxxSdt;
By UsubjId; Id _TrxxSdt; Var ExStDt;Run;
Proc Transpose Data=ExTrtEt Out=ExTrxxEdt;
By UsubjId; Id _TrxxEdt; Var ExEndt;Run;
Proc Transpose Data=ExTrtSt Out=ExTrxxStm;
By UsubjId; Id _TrxxStm; Var ExStTm;Run;
Proc Transpose Data=ExTrtEt Out=ExTrxxEtm;
By UsubjId; Id _TrxxEtm; Var ExEnTm;Run;
Data ExSet_All;
Merge ExTrtxxA(in=a) ExTrxxSdt ExTrxxStm ExTrxxEdt ExTrxxEtm ExTrtxxD ExTrtxxA2 ExTrtSdt ExTrtEdt; By UsubjId;
if a;
Derived_ActArm=strip(_ActArm1); Derived_ActArmCd=strip(_ActArmCd1); TR01SDTM=dhms(TR01SDT, 0, 0, TR01STM); TR01EDTM=dhms(TR01EDT, 0, 0, TR01ETM); TR02SDTM=dhms(TR02SDT, 0, 0, TR02STM); TR02EDTM=dhms(TR02EDT, 0, 0, TR02ETM); TrtSdtm=dhms(TrtSdt, 0, 0, TrtStm); TrtEdtm=dhms(TrtEdt, 0, 0, TrtEtm); Format TrtSdtm TrtEdtm datetime20.; Format TrtSdt TrtEdt date9. TrtStm TrtEtm time8. TR01SDTM TR01EDTM datetime20. TR02SDTM TR02EDTM datetime20.;
Run;
FDA-CBER-2022-5812-0072888
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]Data RfTimeMiss;
Set DmSet; Where ^Missing(RfStTm) or ^Missing(RfEntm);Run;
******************************************************************************************;
* Individual's demographic information *;******************************************************************************************;
Proc Sql NoPrint;
Create table DmSet_Adsl as Select a.*, b._TrtVar2 as Derived_Arm, b._TrtVarOrd as Derived_ArmCd From DmSet as a Left Join TrtMapTxt(where=(upcase(strip(_TrtPhase))="RANDOM")) as b On Upcase(Strip(a.Arm))=Upcase(Strip(b._TrtVar));Quit;
******************************************************************************************;
* Individual's disposition information *;******************************************************************************************;
Proc Sql NoPrint;
Create table RandSet as Select distinct UsubjId, DsStDt as RandDt, DsRefId as RandNo From DsSet Where Upcase(Strip(DsDecod))="RANDOMIZED" and not missing(dsstdt) and not missing(dsrefid) Order by UsubjId, DsStDt;Quit;
Data RandSet;
Set RandSet; By UsubjId RandDt;
If first.Usubjid;
Run;
Proc Sql NoPrint;
Create table EnrlSet as Select distinct UsubjId, DsStDt as EnrlDt, DsRefId as EnrlNo From DsSet where index(upcase(strip(dsdecod)), "OBTAINED") and not missing(dsstdtc) Order by UsubjId, DsStDt;Quit;
Data EnrlSet;
Set EnrlSet; By UsubjId EnrlDt;
If first.Usubjid;
Run;
Proc Sort Data=DsSet Out=CmpFlSet(Keep=UsubjId DsStDt Rename=(DsStDt=ComplDt))
NoDupKey; By UsubjId; Where Upcase(Strip(DsCat))="DISPOSITION EVENT" and Upcase(Strip(DsDecod))="COMPLETED" and Upcase(Strip(Dsphase))="FOLLOW-UP";Run;
FDA-CBER-2022-5812-0072889
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]Data EosSet(Keep=UsubjId EosDcDt _EosDcClDt EosDcRs);
Set DsSet;
Where Upcase(Strip(DsCat))="DISPOSITION EVENT" and Upcase(Strip(DsDecod))^="COMPLETED" and Upcase(Strip(Dsphase))="FOLLOW-UP"; EosDcDt=DsStDt; EosDcRs=DsDecod; _EosDcClDt=DsDt;Run;
Proc Sort Data=EosSet;
By UsubjId EosDcDt;Run;
Data EosSet;
Set EosSet; By UsubjId EosDcDt;
If Last.UsubjId;
Run;
Data EotSet(Keep=UsubjId EotDcDt _EotDcClDt EotDcRs);
Set DsSet; Where Upcase(Strip(DsCat))="DISPOSITION EVENT" and Upcase(Strip(DsDecod))^="COMPLETED" and Index(Upcase(Strip(Dsphase)), "VACCINATION")>0; EotDcDt=DsStDt; EotDcRs=DsDecod; _EotDcClDt=DsDt;Run;
Proc Sort Data=EotSet;
By UsubjId EotDcDt;Run;
Data EotSet;
Set EotSet; By Usubjid EotDcDt;
If Last.Usubjid;
Run;
proc sort data=EosSet out=_ds1;
by UsubjId;run;
proc sort data=EotSet out=_ds2;
by UsubjId;run;
data EosEotSet;
merge _ds1(in=d1 keep=UsubjId EosDcDt _EosDcClDt EosDcRs) _ds2(in=d2 keep=UsubjId EotDcDt _EotDcClDt EotDcRs); by UsubjId;
FDA-CBER-2022-5812-0072890
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] if d1 or d2;
run;
Data EosEotSet;
Set EosEotSet; EosDcDt=coalesce(EosDcDt, _EosDcClDt); EotDcDt=coalesce(EotDcDt, _EotDcClDt); Drop _:;Run;
******************************************************************************************;
* Rebuild ActArm Process *;******************************************************************************************;
Proc Sort data=DmSet_Adsl Out=DmArm_cd(keep=Derived_Armcd Derived_Arm) Nodupkey;
By Derived_ArmCd Derived_Arm;Run;
Proc Sql;
Create table ExSet_Adsl as Select distinct a.*, b.Derived_Arm as Derived_ActArm2 From ExSet_All as a Left Join DmArm_Cd as b On a.Derived_ActArmCd=b.Derived_ArmCd;Quit;
******************************************************************************************;
* Get variables from Demog Exposure and Disposition datatsets. *;* Derive Population Flags, Demog Decode/Code variables. *;* Re-Derive Arm/ArmCd/ActArm/ActArmCd variables. *;* Derive Planned and Actual Treatment Sequence variables. *;* Derive Trt<nn>A/Trt<nn>AN/Trt<nn>P/Trt<nn>PN variables. *;* Derive Treatment and Analysis Period Date, Time and DateTime variables. *;******************************************************************************************;
Proc Sort Data=DmSet_Adsl;
By UsubjId;Run;
Proc Sort Data=ExSet_Adsl;
By UsubjId;Run;
Data Adsl;
Length Arm ActArm Aethnic Arace $200. ArmCd ActArmCd $20. TRT01A $200. TRT02A $200. RaceGr1x RaceGr1 $100.; Merge DmSet_Adsl(in=_dm_) ExSet_Adsl(in=_ex_) RandSet (in=_ras_) EnrlSet (in=_enr_) CmpFlSet (in=_cmp_) EosEotSet; By UsubjId;
If _dm_; If _dm_ and _ex_ then
SafFl="Y"; Else if _dm_ and ^_ex_ then
SafFl="N";
FDA-CBER-2022-5812-0072891
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] If _dm_ and _ras_ then
RandFl="Y"; Else RandFl="N";
if RandFL="N" then
SafFL="N";
If _dm_ and _enr_ then
EnrlFl="Y"; Else EnrlFl="N";
If _dm_ and _cmp_ then
ComplFl="Y"; Else ComplFl="N"; SexN=input(Sex, ??sex.); RaceN=input(Race, ??Race.);
if ^missing(Ethnic) then
Aethnic=Ethnic; else Aethnic="UNKNOWN"; EthnicN=input(Ethnic, ??Ethnic.); AethnicN=input(Aethnic, ??Aethnic.); RacialDN=input(RacialD, ??RacialD.); RaceOth=" ";
If ^Missing(Race) then
do;
if upcase(Race)="MULTIPLE" then
ARace="MULTIRACIAL"; else Arace=Race; end; else If missing(Race) and upcase(Race1)="NOT REPORTED" then Arace=Race1; Else If ^Missing(RaceOth) then Arace="OTHER"; Else Arace="UNKNOWN"; AraceN=input(Arace, ??Arace.);
If upcase(Race)="WHITE" then
RACEGR1x='WHITE'; Else If upcase(Race)="BLACK OR AFRICAN AMERICAN" then RACEGR1x='BLACK OR AFRICAN AMERICAN'; Else If upcase(Race) not in ("WHITE" "BLACK OR AFRICAN AMERICAN") then RACEGR1x='ALL OTHERS'; RaceGr1=RaceGr1x; RaceGr1N=input(RaceGr1, ??RaceGr1x.);
FDA-CBER-2022-5812-0072892
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] Arm=coalescec(strip(Derived_Arm), Arm);
ArmCd=coalescec(strip(Derived_ArmCd), ArmCd);
If Missing(Derived_ActArmCd) and ArmCd not in ("SCRNFAIL", "NOTASSGN") then
do; ActArmCd="NOTTRT"; ActArm="Not Treated"; End; Else if ^Missing(Derived_ActArmCd) and Derived_ActArmcd^=Armcd then do;
If derived_actarmcd in ("B2_P23_30", "PLACEBO") then
do; ActArmcd=derived_actarmcd; Actarm=derived_actarm2; End; Else if derived_actarmcd in ("B1" "B2") and substr(armcd, 1, 2)=substr(derived_actarmcd, 1, 2) then do; ActArmcd=armcd; Actarm=arm; End; Else if derived_actarmcd in ("B1" "B2") and not missing(dsrangrp) then do; ActArmcd=strip(derived_actarmcd)||"_"||strip(scan(dosalvl, 1, "(")); Actarm=strip(derived_actarm)||" Phase 1 ("||strip(scan(dosalvl, 1, "("))||" mcg)"; End; Else if derived_actarmcd in ("B1" "B2") and missing(dsrangrp) then do; ActArmcd=strip(derived_actarmcd)||"_P23_30"; Actarm=strip(derived_actarm)||" Phase 2/3 (30 mcg)"; End; Else if derived_actarmcd in ("PLACEBO") then do; ActArmcd="PLACEBO"; Actarm="Placebo"; End; Else if derived_actarmcd='SA' and substr(armcd, 1, 2)=substr(derived_actarmcd, 1, 2) then do; ActArmcd="SA_30"; Actarm="BNT162b2-Naive Participants - BNT162b2SA (30 mcg) 2 Doses"; End; Else if derived_actarmcd not in ("B2_P23_30", "PLACEBO") and not missing(derived_actarmcd) then do; ActArmCd="NOTTRT"; ActArm="Not Treated"; End; Else if derived_actarmcd not in ("B2_P23_30", "PLACEBO") then do; ActArmCd="UNPLAN";
ActArm="Unplanned Treatment";
FDA-CBER-2022-5812-0072893
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] End;
End;
Else if ^Missing(Derived_ActArmCd) then do; ActArmCd=Derived_ActArmCd; ActArm=Derived_ActArm2; End; TrtSeqA=Strip(Derived_ActArm); TRT01AN=input(_ActArmCd1, ?? TrtNFmt.); TRT02AN=input(_ActArmCd2, ?? TrtNFmt.); Format ComplDt RandDt EnrlDt date9.; Drop ComplFl ComplDt RaceOth RaceGr1x;Run;
******************************************************************************************;
* Derive AAge and AAgeU variables. *;* Derive Age<x> and Age<x>U from AAge [where x=Y,M,W,D and H]. *;* Derive Age Group related variables from Analysis Age variable [AAGE]. *;******************************************************************************************;
data adsl;
set adsl;
if not missing(RANDDT) then
ENRLDT=RANDDT; else if not missing(RFICDTC) then ENRLDT=input(RFICDTC, yymmdd10.);run;
data adsl;
set adsl; length aageu $6 agegr1 $100 RANDAGE $100; _birthday=day(brthdt); _birthmth=month(brthdt); _birthyr=year(brthdt); _EnrlDtday=day(EnrlDt); _EnrlDtmth=month(EnrlDt); _EnrlDtyr=year(EnrlDt); aage=_EnrlDtyr - _birthyr;
if (_EnrlDtmth lt _birthmth) or ((_EnrlDtmth eq _birthmth) and (_EnrlDtday lt
_birthday)) then do; aage=aage - 1; end;
if n(aage) then
aageu="YEARS";
If 12<=(aage)<=15 and missing(dsrangrp) then
RANDAGE='12-15 Years'; Else If 16<=(aage)<=55 and missing(dsrangrp) then RANDAGE='16-55 Years';
Else If 18<=(aage)<=55 and not missing(dsrangrp) then
FDA-CBER-2022-5812-0072894
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] RANDAGE='18-55 Years';
Else If 65<=(aage) and not missing(dsrangrp) then
RANDAGE='65-85 Years'; Else If 56<=(aage) and missing(dsrangrp) then RANDAGE='>55 Years'; agegr1=RANDAGE; agegr1N=input(agegr1, ??RANDAGE.); drop RANDAGE; ;run;
data adsl;
set adsl; length aageyu $6; _birthday=day(brthdt); _birthmth=month(brthdt); _birthyr=year(brthdt); _EnrlDtday=day(EnrlDt); _EnrlDtmth=month(EnrlDt); _EnrlDtyr=year(EnrlDt); aagey=_EnrlDtyr - _birthyr;
if (_EnrlDtmth lt _birthmth) or ((_EnrlDtmth eq _birthmth) and (_EnrlDtday lt
_birthday)) then do; aagey=aagey - 1; end;
if n(aagey) then
aageyu="YEARS"; length aagemu $6; aagem=int((EnrlDt-brthdt+1)/30.4375);
if n(aagem) then
aagemu="MONTHS"; length aagewu $6; aagew=int((EnrlDt-brthdt+1)/7);
if n(aagew) then
aagewu="WEEKS"; length aagedu $6; aaged=EnrlDt - brthdt + 1;
if n(aaged) then
aagedu="DAYS"; length aagehu $6; aageh=(EnrlDt - brthdt + 1)*24;
if n(aageh) then
aagehu="HOURS";run;
******************************************************************************************;
* Planned Treatments Sequence from Treatmap *;
FDA-CBER-2022-5812-0072895
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]******************************************************************************************;
Data Adsl;
Set Adsl; Length TrtSeqP $200. _TrtpTmp1 TRT01P $200.; _TrtpArmCd1=ArmCd; TRT01P=Arm; _TrtpTmp1=TRT01P;
if _TrtpArmCd1="B2_P23_30" then
TRT01PN=1; else if _TrtpArmCd1="PLACEBO" then TRT01PN=2; TrtSeqP=_TrtPTmp1;Run;
******************************************************************************************;
* Derive Vaccination Dates and Age related variables. *;******************************************************************************************;
proc sort data=exset out=exuse(rename=(visitnum=vstn_org visit=vst_org));
by usubjid exstdtc exendtc visitnum; where visitnum ne .;run;
data exset;
set exuse;
if index(vst_org, "_VAX1") then
visitnum=1;
if index(vst_org, "_VAX2") then
visitnum=2;
if index(vst_org, "_VAX3") then
visitnum=3;
if index(vst_org, "_VAX4") or vst_org='V303_MONTH1_POSTVAX3' then
visitnum=4;
if vst_org="" and period="Double Blinded Period" then
visitnum=2.01; else if vst_org="" and period="Open Label Period" then visitnum=4.01;run;
proc sort data=exset out=exvac_(keep=usubjid visitnum exstdt) nodupkey;
by visitnum usubjid;run;
data exvacxx1;
set exvac_; where visitnum in (1 2 2.01);
run;
FDA-CBER-2022-5812-0072896
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]data exvacxx2;
set exvac_; where visitnum in (3 4 4.01);run;
data exvac;
set exvacxx:;run;
proc sort data=exvac out=exvac(keep=usubjid visitnum exstdt) nodupkey;
by visitnum usubjid;run;
proc sort data=exset out=exvisg1(keep=visitnum) nodupkey;
by visitnum; where visitnum in (1 2 2.01);run;
data exvisg1;
set exvisg1 end=eof; by visitnum; length vaxvar $8 vaxlabel $40; vaxg=1; vaxn=put(_n_, z2.); vaxvar=cats("VAX", "1", vaxn, "DT"); vaxlabel=ifC(1 eq 1, catx(" ", "Vaccination Date", vaxn), catx(" ", "Vaccination Group1 Date", vaxn));
if eof then
call symputx(cats('_nvax', 1), cats(_n_)); ;run;
data exvis(index=(visitnum));
set exvisg1;run;
proc sort data=exset out=exvisg2(keep=visitnum) nodupkey;
by visitnum; where visitnum in (3 4 4.01);run;
data exvisg2;
set exvisg2 end=eof; by visitnum; length vaxvar $8 vaxlabel $40; vaxg=2; vaxn=put(_n_, z2.); vaxvar=cats("VAX", "2", vaxn, "DT"); vaxlabel=ifC(2 eq 1, catx(" ", "Vaccination Date", vaxn), catx(" ", "Vaccination Group2 Date", vaxn));
if eof then
FDA-CBER-2022-5812-0072897
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] call symputx(cats('_nvax', 2), cats(_n_));
;
run;
data exvis(index=(visitnum));
set exvis exvisg2;run;
data rfadsl(keep=usubjid brthdt index=(usubjid));
set adsl;run;
data exvac1;
set exvac; set exvis(keep=visitnum vaxg vaxn vaxvar vaxlabel) key=visitnum/unique; set rfadsl key=usubjid/unique;
if _error_=1 then
do; _error_=0; call missing(brthdt); end; cvalue=exstdt; output exvac1;
if vaxg=1 then
do; vaxvar=cats('AGETR', vaxn); vaxlabel=catx(' ', 'Age at Vaccination', vaxn); _birthday=day(brthdt); _birthmth=month(brthdt); _birthyr=year(brthdt); _exstdtday=day(exstdt); _exstdtmth=month(exstdt); _exstdtyr=year(exstdt); cvalue=_exstdtyr - _birthyr;
if (_exstdtmth lt _birthmth) or ((_exstdtmth eq _birthmth) and (_exstdtday
lt _birthday)) then do; cvalue=cvalue - 1; end; output exvac1; end;run;
proc sort data=exvac1;
by usubjid;run;
proc transpose data=exvac1 out=exvac2(drop=_:);
by usubjid; id vaxvar;
idlabel vaxlabel;
FDA-CBER-2022-5812-0072898
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] var cvalue;
run;
data exvac2;
set exvac2; attrib agetru01 label="Age Units at Vaccination 01" length=$6;
if n(agetr01) then
agetru01="YEARS"; format vax101dt date9.; attrib agetru02 label="Age Units at Vaccination 02" length=$6;
if n(agetr02) then
agetru02="YEARS"; format vax102dt date9.; attrib agetru03 label="Age Units at Vaccination 03" length=$6;
if n(agetr03) then
agetru03="YEARS"; format vax103dt date9.; format vax201dt date9.; format vax202dt date9.; length INFAGE agetgr1 $40.;
If 12<=(agetr01)<=15 and missing(dsrangrp) then
INFAGE='12-15 Years'; Else If 16<=(agetr01)<=55 and missing(dsrangrp) then INFAGE='16-55 Years'; Else If 18<=(agetr01)<=55 and not missing(dsrangrp) then INFAGE='18-55 Years'; Else If 65<=(agetr01) and not missing(dsrangrp) then INFAGE='65-85 Years'; Else If 56<=(agetr01) and missing(dsrangrp) then INFAGE='>55 Years'; agetgr1=INFAGE; agetgr1n=input(INFAGE, ??INFAGE.); attrib agetgr1 label="Age Group at Vaccination 01" agetgr1n label="Age Group at Vaccination 01 (N)";run;
data adsl;
merge adsl(in=a) exvac2(keep=usubjid vax101dt vax102dt vax103dt vax201dt vax202dt agetr01 agetru01 agetr02 agetru02 agetr03 agetru03 agetgr1n agetgr1); by usubjid;
if a;
run;
******************************************************************************************;
* VS *;******************************************************************************************;
data srv_vs;
set dataprot.vs;
FDA-CBER-2022-5812-0072899
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] vsdt=input(vsdtc, ??is8601da.);
format vsdt date9.;
keep usubjid vsdt; where ^missing(vsorres);run;
proc sort data=srv_vs;
by usubjid vsdt;run;
data srv_vs;
set srv_vs; by usubjid vsdt;
if last.usubjid;
run;
******************************************************************************************;
* LB *;******************************************************************************************;
data srv_lb;
set dataprot.lb; lbdt=input(lbdtc, ??is8601da.); format lbdt date9.; keep usubjid lbdt; where ^missing(lborres);run;
proc sort data=srv_lb;
by usubjid lbdt;run;
data srv_lb;
set srv_lb; by usubjid lbdt;
if last.usubjid;
run;
******************************************************************************************;
* CM *;******************************************************************************************;
data srv_cm;
set dataprot.cm; cmstdt=input(cmstdtc, ??is8601da.); format cmstdt date9.; cmendt=input(cmendtc, ??is8601da.); format cmendt date9.; _maxcmdt=max(cmstdt, cmendt); keep usubjid _maxcmdt;run;
FDA-CBER-2022-5812-0072900
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]proc sort data=srv_cm;
by usubjid _maxcmdt;
run;
data srv_cm;
set srv_cm; by usubjid _maxcmdt;
if last.usubjid;
run;
******************************************************************************************;
* DS *;******************************************************************************************;
data srv_ds;
set dataprot.ds; dsstdt=input(dsstdtc, ??is8601da.); format dsstdt date9.; where dsdecod not in ("LOST TO FOLLOW-UP", "DEATH", "ENROLLED"); keep usubjid dsstdt;run;
proc sort data=srv_ds;
by usubjid dsstdt;run;
data srv_ds;
set srv_ds; by usubjid dsstdt;
if last.usubjid;
run;
******************************************************************************************;
* DM *;******************************************************************************************;
data srv_dmadthdt;
set dataprot.dm;
if ^missing(dthdtc) then
do; length yr $4 mm dd $2; yr=substr(dthdtc, 1, 4); mm=substr(dthdtc, 6, 2); dd=substr(dthdtc, 9, 2); ;
if yr ne ' ' then
do; dflag=' ';
if (dd eq " " or dd eq "-T") and mm ne " " then
FDA-CBER-2022-5812-0072901
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] do;
dd='01';
dflag='D'; end;
if mm eq " " or mm eq "--" then
do; mm='01'; dd='01'; dflag='M'; end; newdate=(trim(left(yr))||'-'||trim(left(mm))||'-'||trim(left(dd))); adthdt=input(newdate, ??is8601da.); format adthdt date9.; adthdtF=dflag; end; drop yr mm dd dflag newdate; end; keep usubjid adthdt adthdtf;run;
proc sort data=srv_dmadthdt;
by usubjid;run;
******************************************************************************************;
* Get recent most(max) from all assessment dates and along with Treatment Start/End and *;* Randomization Date. *;* Note: If derived ADTHDT is on or prior to SRVLACDT then reset as Last Contact Date +1.*;******************************************************************************************;
data SrvSet;
merge Adsl(in=a keep=usubjid trtsdt trtedt RANDDT dthfl) srv_dmadthdt srv_vs srv_lb srv_cm srv_ds; by usubjid;
if a;
_srvlacdt=max(trtsdt, trtedt, RANDDT, vsdt, lbdt, _maxcmdt, dsstdt);
if ((^missing(adthdtf) and adthdt<=_srvlacdt) or (dthfl="Y" and
missing(adthdt))) then adthdt=_srvlacdt+1;
if missing(adthdt) then
srvlacdt=_srvlacdt; attrib adthdt label="Analysis Date of Death" format=date9.; attrib srvlacdt label="Date of Last Contact" format=date9.; keep usubjid srvlacdt adthdt adthdtf;run;
data adsl;
merge adsl(in=a) srvset(in=b keep=usubjid adthdt: srvlacdt); by usubjid;
FDA-CBER-2022-5812-0072902
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] if a;
dthdt=adthdt;
dthdtf=adthdtf; drop adthdt adthdtf; format dthdt date9.;run;
******************************************************************************************;
* Specification 1 *;* ADD INDIVIDUAL BASELINE INFO. *;* 1 - Cohort info. *;* 2 - Phase info. *;* 3 - Age Group variables. *;* 4 - Pop for VOC in naive subjects *;******************************************************************************************;*Cohort info;
data suppds;
set dataprot.suppds; where qnam="DSRANGRP";
proc sort;
by usubjid;run;
data adsl;
merge adsl(in=a) suppds(keep=usubjid qval rename=(qval=COHORT)); by usubjid; label COHORT="Cohort Group" COHORTN="Cohort Group (N)";
if index(cohort, "Stage 1") then
srt1=1; else if index(cohort, "Stage 2") then srt1=2;
if index(cohort, "21 Day") then
srt2=1; else if index(cohort, "1-dose") then srt2=2; else if index(cohort, "60 Day") then srt2=3;
if index(cohort, "Age 18 to 55") then
srt3=1; else if index(cohort, "Age 65 to 85") then srt3=2; else if index(cohort, "Age 56 to 85") then srt3=3;
if index(cohort, "BNT162a1") then
srt4=1; else if index(cohort, "BNT162b1") then srt4=2;
else if index(cohort, "BNT162b2") then
FDA-CBER-2022-5812-0072903
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] srt4=3;
else if index(cohort, "BNT162c2") then
srt4=4;
if index(cohort, "Low-") then
srt5=2; else if index(cohort, "Low") then srt5=1; else if index(cohort, "-High") then srt5=4; else if index(cohort, "Medium") then srt5=3; else if index(cohort, "High") then srt5=5;
if srt1=1 then
do;
if srt2=1 then
cohortn=srt1+0.1+(srt3-1)*0.2+(srt4-1)*0.03+0.01+(srt5-1)*0.005; else if srt2>1 then cohortn=srt1+0.5+(srt3-1)*0.2+(srt2-2)*0.1+srt4*0.01; end; else if srt1>1 then cohortn=srt1+0.1+(srt3-1)/2*0.3+(srt2-1)*0.1+srt4*0.01+srt5*0.001; cohortn=round(cohortn, 0.001);run;
*Distinct subject from phase 2 & 3;proc import datafile="&expath./first-c4591001-360-participants-enrolled-v1-13aug20-update.xlsx"
out=phase2 dbms=xlsx replace; getnames=no; datarow=2; sheet="SubjID_360";run;
data phase2;
set phase2; length subjid $20; subjid=B;
proc sort;
by subjid;run;
proc import
datafile="&expath./newlist-c4591001-6k-participants-enrolled-v3-17sep2020.xlsx" out=phase3(rename=(a=var1)) dbms=xlsx replace; getnames=no; datarow=2;run;
data phase3;
FDA-CBER-2022-5812-0072904
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] set phase3;
length subjid $20;
subjid=scan(var1, -1, " ");
proc sort;
by subjid;run;
data adsl;
merge adsl(in=a) /*phase1(keep=subjid in=b)*/ phase2(keep=subjid in=c) phase3(keep=subjid in=d); by subjid;
if a;
attrib PHASEN label="Study Phase (N)" PHASE label="Study Phase" format=$200.;
/*if b then
do; PHASEN=1; PHASE="Phase 1"; end; else */if c then do; PHASEN=2; PHASE="Phase 2_ds360/ds6000"; end; else if d then do; PHASEN=3; PHASE="Phase 3_ds6000"; end; else do; PHASEN=4; PHASE="Phase 3"; end; dosplvl=""; dosalvl=""; dosplvln=.; dosalvln=.;run;
*Categorize age groups;data adsl;
set adsl;
if missing(AGETR01) then
do; AGETR01=AAGE; AGETRU01=AAGEU; AGETGR1=AGEGR1; AGETGR1N=AGEGR1N;
end;
FDA-CBER-2022-5812-0072905
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] AGEGR1=AGETGR1;
AGEGR1N=AGETGR1N;
length AGEGR2 AGEGR3 AGEGR4 $100.;
if PHASEN^=1 then
do;
if AGEGR1N=3 then
do; AGEGR1N=2; AGEGR1="16-55 Years"; end;
if AGEGR1N=4 then
do; AGEGR1N=5; AGEGR1=">55 Years"; end;
if 12<=AGETR01<=15 then
do; AGEGR4="12-15 Years"; AGEGR4N=1; end;
if 16<=AGETR01<=25 then
do; AGEGR4="16-25 Years"; AGEGR4N=2; end; end; else do;
if AGEGR1N=2 then
do; AGEGR1N=3; AGEGR1="18-55 Years"; end;
if AGEGR1N=5 then
do; AGEGR1N=4; AGEGR1="65-85 Years"; end; end;
if 65<=AGETR01 then
do; AGEGR2N=2; AGEGR2=">=65 Years"; end; else if .<AGETR01<65 then
do;
FDA-CBER-2022-5812-0072906
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] AGEGR2N=1;
AGEGR2="<65 Years";
end;
if 16<=AGETR01<=17 then
do; AGEGR3N=1; AGEGR3="16-17 Years"; end; else if 18<=AGETR01<=55 then do; AGEGR3N=2; AGEGR3="18-55 Years"; end; else if AGETR01>55 then do; AGEGR3N=3; AGEGR3=">55 Years"; end;
if vax201dt>. and brthdtc ne "" then
do; label agetr03="Age at Vaccination 03" agetru03="Age Units at Vaccination 03" agetgr3="Age Group at Vaccination 03" agetgr3n="Age Group at Vaccination 03 (N)"; agetr03=floor((vax201dt-brthdt)/365.25);
if substr(brthdtc, 5)=substr(strip(put(vax201dt, yymmdd10.)), 5) then
agetr03=input(substr(strip(put(vax201dt, yymmdd10.)), 1, 4), best.)-input(substr(brthdtc, 1, 4), best.); agetru03="YEARS";
if 18<=agetr03<=55 then
do; agetgr3="18-55 Years"; agetgr3N=1; end; else if agetr03>55 then do; agetgr3=">55 Years"; agetgr3N=2; end; end; else do; agetr03=.; agetru03=""; end;run;
******************************************************************************************;
* Specification 2 *;* ADD PERIOD 2 TRT INFO AND VAX-SPECIFIC VARS *;
* 1 - VAXn0nTM/VAXn0n. *;
FDA-CBER-2022-5812-0072907
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]* 2 - TRT02P/TRT02PN. *;
* 3 - TR01:/TR02: for subjects that can not be distinguish as 2 periods *;
******************************************************************************************;*VAXn0nTM/VAXn0n;
proc sql;
create table ex as select a.*, b.phasen from ExSet a left join adsl b on a.usubjid=b.usubjid order by periodn, usubjid, visitnum; run;
proc sort data=ex nodupkey;
by periodn usubjid visitnum;run;
data ex;
set ex; by periodn usubjid visitnum;
if extptref in ("VACCINATION 1" "VACCINATION 3") then
extmp=1;
if extptref in ("VACCINATION 2" "VACCINATION 4") then
extmp=2;
if extptref="UNPLANNED VACCINATION" then
extmp=3; extptref1n=periodn*100+extmp; extptref1="VAX"||strip(put(extptref1n, best.)); format extime time8. exdatetime datetime20.; extime=input(scan(exstdtc, 2, "T"), time8.); exdatetime=input(exstdtc, is8601dt.);
if exdosu in ("ug" "mcg") and index(extrt, "BNT") then
extrt1=strip(extrt)||" ("||strip(exdose)||" (*ESC*){unicode 03BC}g)"; else if phasen=1 and periodn=1 and index(extrt, "BNT") and index(dosalvl, "/") then extrt1=strip(extrt)||" ("||strip(scan(dosalvl, 1, "/"))||")"; else if phasen=1 and periodn=1 and index(extrt, "BNT") and not missing(dosalvl) then extrt1=strip(extrt)||" ("||strip(dosalvl)||")"; else if not (phasen=1 and periodn=1) and index(extrt, "BNT") then extrt1=strip(extrt)||" (30 (*ESC*){unicode 03BC}g)"; else if upcase(extrt)='INDETERMINATE' then extrt1='Indeterminate';
if extrt="Placebo" then
extrt1=extrt;
proc sort;
by usubjid extptref1n;run;
proc transpose data=ex out=t_ex;
by usubjid;
FDA-CBER-2022-5812-0072908
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] id extptref1;
var extrt1;
run;
proc transpose data=ex out=t_ex1 prefix=vax suffix=tm;
by usubjid; id extptref1n; var extime;run;
proc transpose data=ex out=t_ex2 prefix=vax suffix=dtm;
by usubjid; id extptref1n; var exdatetime;run;
*Correct Period 2 info;data adsl(rename=(VAX103=VAX10U VAX203=VAX20U VAX103DT=VAX10UDT
VAX203DT=VAX20UDT VAX103TM=VAX10UTM VAX203TM=VAX20UTM)); attrib TR02EDT label='Date of Last Exposure in Period 02' TR02EDTM label='Datetime of Last Exposure in Period 02' TR02ETM label='Time of Last Exposure in Period 02' TR02SDT label='Date of First Exposure in Period 02' TR02SDTM label='Datetime of First Exposure in Period 02' TR02STM label='Time of First Exposure in Period 02' TRT02A label='Actual Treatment for Period 02' TRT02AN label='Actual Treatment for Period 02 (N)' VAX202 length=$200. VAX103DT format=date9. VAX202DT format=date9. VAX203DT format=date9. VAX103 length=$200. VAX203 length=$200. VAX101TM length=8. format=time8. VAX102TM length=8. format=time8. VAX103TM length=8. format=time8. VAX201TM length=8. format=time8. VAX202TM length=8. format=time8. VAX203TM length=8. format=time8.; merge adsl(in=a drop=trtseqp trtseqa rename=(trt01p=_trt01p trt01pn=_trt01pn trt01a=_trt01a trt01an=_trt01an trt02a=_trt02a trt02an=_trt02an)) t_ex(drop=_NAME_) t_ex1(drop=_NAME_) t_ex2(drop=_NAME_); by usubjid;
if a;
label VAX103DT="Vaccination Date Unplanned" VAX201DT="Vaccination Date 03" VAX202DT="Vaccination Date 04" VAX203DT="Vaccination Date Unplanned in Period 02" VAX101="Vaccination 01" VAX102="Vaccination 02" VAX103="Vaccination Unplanned" VAX201="Vaccination 03" VAX202="Vaccination 04" VAX203="Vaccination Unplanned in Period 02" VAX101TM="Vaccination Time 01" VAX102TM="Vaccination Time 02" VAX103TM="Vaccination Time Unplanned" VAX201TM="Vaccination Time 03" VAX202TM="Vaccination Time 04" VAX203TM="Vaccination Time Unplanned in Period 02";
if TR01SDT ne . and (VAX101DT eq . and VAX102DT eq . and VAX103DT eq .) then
do; TR01SDT=.; TR01SDTM=.;
TR01STM=.;
FDA-CBER-2022-5812-0072909
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] _trt01a='';
end;
if TR02SDT ne VAX201DT and VAX201DT>. then
do; TR01EDTM=max(VAX103DTM, VAX102DTM, VAX101DTM); TR01EDT=datepart(TR01EDTM); TR01ETM=timepart(TR01EDTM); TR02SDTM=VAX201DTM; TR02SDT=datepart(TR02SDTM); TR02STM=timepart(TR02SDTM); TR02EDTM=max(VAX203DTM, VAX202DTM, VAX201DTM); TR02EDT=datepart(TR02EDTM); TR02ETM=timepart(TR02EDTM); end; length TRT01P TRT01A TRT02P TRT02A $200;
if arm in ("SCREEN FAILURE" "NOT ASSIGNED") then
do; actarm=arm; actarmcd=armcd; end;
if _TRT01P not in ("SCREEN FAILURE" "NOT ASSIGNED") then
do;
if arm='BNT162b2-Naive Participants - BNT162b2SA (30 mcg) 2 Doses' then
_trt01p='BNT162b2-Naive Participants - BNT162b2SA (30 mcg) 2 Doses'; else if index(arm, '-') and index(arm, 'booster') then _trt01p='BNT162b2 Phase 2/3 (30 mcg)'; TRT01P=_TRT01P; TRT01PN=input(TRT01P, trtfmt.); end;
if _TRT01A ne "" then
do;
if _TRT01A="Placebo" then
TRT01A=_TRT01A; else if _TRT01A='BNT162b2SA' then TRT01A='BNT162b2-Naive Participants - BNT162b2SA (30 mcg) 2 Doses'; else if PHASEN=1 and index(_TRT01A, "BNT") and index(dosalvl, "/")=0 then TRT01A=strip(_TRT01A)||" Phase 1 ("||tranwrd(scan(strip(dosalvl), 1, "/"), "(*ESC*){unicode 03BC}g", "mcg")||")"; else if PHASEN=1 and index(_TRT01A, "BNT") then TRT01A=strip(_TRT01A)||" Phase 1 ("||strip(scan(scan(dosalvl, 1, "/"), 1, "(*ESC*)"))||"/"||strip(scan(scan(dosalvl, 2, "/"), 1, "(*ESC*)"))||" mcg)"; else if index(_TRT01A, "BNT") then TRT01A=strip(_TRT01A)||" Phase 2/3 (30 mcg)"; else if index(upcase(compress(vax101)||compress(vax102)||compress(vax103)), 'INDETERMINATE') and index(upcase(compress(vax101)||compress(vax102)||compress(vax103)), 'BNT')
eq 0 and
FDA-CBER-2022-5812-0072910
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] index(upcase(compress(vax101)||compress(vax102)||compress(vax103)),
'PLACEBO') eq 0 then
TRT01A='Indeterminate'; end; TRT01AN=input(TRT01A, trtfmt.);
if index(arm, 'booster') eq 0 and arm not in ("SCREEN FAILURE" "NOT ASSIGNED")
then do;
if missing(trt01a) then
do; actarm='Not Treated'; actarmcd='NOTTRT'; end; end;
if arm='BNT162b2-Naive Participants - BNT162b2SA (30 mcg) 2 Doses' then
do; trt02p=''; end; else if tr02sdt>. and index(arm, '-')=0 then do;
if PHASEN=1 then
do;
if trt01a='Placebo' then
trt02p="BNT162b2 Phase 1 (30 mcg)"; else if missing(trt01a) or trt01a='Indeterminate' then trt02p="BNT162b2 Phase 1 (30 mcg)"; else if index(trt01a, '100') eq 0 and index(trt01a, 'BNT') then trt02p="BNT162b2 (30 mcg, 1 Dose)"; else trt02p=''; end; else do;
if trt01a='Placebo' then
trt02p="BNT162b2 Phase 2/3 (30 mcg)"; else if missing(trt01a) or trt01a='Indeterminate' then trt02p="BNT162b2 Phase 2/3 (30 mcg)"; else trt02p=""; end; end; else if index(arm, '-')then do;
if strip(scan(arm, 2, '-'))='BNT162b2 (10 mcg) 1 booster' then
trt02p='BNT162b2 (10 mcg, 1 Dose)';
if strip(scan(arm, 2, '-'))='BNT162b2 (30 mcg) 1 booster' then
FDA-CBER-2022-5812-0072911
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] trt02p='BNT162b2 (30 mcg, 1 Dose)';
if strip(scan(arm, 2, '-'))='BNT162b2 (5 mcg) 1 booster' then
trt02p='BNT162b2 (5 mcg, 1 Dose)';
if strip(scan(arm, 2, '-'))='BNT162b2SA (30 mcg) 1 booster' then
trt02p='BNT162b2SA (30 mcg, 1 Dose)';
if strip(scan(arm, 2, '-'))='BNT162b2SA (30 mcg) 2 booster' then
trt02p='BNT162b2SA (30 mcg, 2 Doses)'; end;
if tr02sdt>. then
do;
if PHASEN=1 then
do;
if missing(trt01a) and (index(VAX201, "BNT") or index(VAX202, "BNT") or
index(VAX203, "BNT")) then TRT02A="BNT162b2 Phase 1 (30 mcg)"; ELSE if TRT01A='Placebo' and (index(VAX201, "BNT") or index(VAX202, "BNT") or index(VAX203, "BNT")) then TRT02A="BNT162b2 Phase 1 (30 mcg)"; end; else do;
if missing(trt01a) and (index(VAX201, "BNT") or index(VAX202, "BNT") or
index(VAX203, "BNT")) then TRT02A="BNT162b2 Phase 2/3 (30 mcg)"; else if TRT01A='Placebo' and (index(VAX201, "BNT") or index(VAX202, "BNT") or index(VAX203, "BNT")) then TRT02A="BNT162b2 Phase 2/3 (30 mcg)"; else if index(vax201, 'BNT') and index(vax201, '30') and index(vax201, 'SA') and index(trt02p, '1 Dose') ge 1 then TRT02A="BNT162b2SA (30 mcg, 1 Dose)"; else if index(vax201, 'BNT') and index(vax201, '30') and index(vax201, 'SA') and index(trt02p, '2 Doses') ge 1 then TRT02A="BNT162b2SA (30 mcg, 2 Doses)"; else if index(vax201, 'BNT') and index(vax201, '5') and index(vax201, 'SA') eq 0 then TRT02A="BNT162b2 (5 mcg, 1 Dose)"; else if index(vax201, 'BNT') and index(vax201, '10') and index(vax201, 'SA') eq 0 then TRT02A="BNT162b2 (10 mcg, 1 Dose)"; else if index(vax201, 'BNT') and index(vax201, '30') and index(vax201, 'SA') eq 0 then TRT02A="BNT162b2 (30 mcg, 1 Dose)"; end; end; else TRT02A='';
FDA-CBER-2022-5812-0072912
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] if index(upcase(compress(vax201)||compress(vax202)||compress(vax203)),
'INDETERMINATE') and
index(upcase(compress(vax201)||compress(vax202)||compress(vax203)), 'BNT') eq 0 and index(upcase(compress(vax201)||compress(vax202)||compress(vax203)), 'PLACEBO') EQ 0 then TRT02A='Indeterminate';
if not missing(trt01a) and missing(trt02a) and index(arm, '-') then
do;
if trt01a=trt01p then
do;
if arm='BNT162b2-Naive Participants - BNT162b2SA (30 mcg) 2 Doses' then
do; actarm=arm; actarmcd=armcd; end; else do; actarm=strip(scan(arm, 1, '-')); actarmcd=strip(scan(armcd, 1, '-')); end; end; else do; *navie group and re-rand group will not take placebo for period 1; *IND will be considered; end; end; else if not missing(trt01a) and not missing(trt02a) and index(arm, 'booster') then do;
if trt01a='BNT162b2 Phase 2/3 (30 mcg)' and
trt02a='BNT162b2 (30 mcg, 1 Dose)' then do; actarmcd='B2_P23_30-B2_30_1DB'; actarm='BNT162b2 Phase 2/3 (30 mcg) - BNT162b2 (30 mcg) 1 booster'; end;
if trt01a='BNT162b2 Phase 2/3 (30 mcg)' and
trt02a='BNT162b2SA (30 mcg, 1 Dose)' then do; actarmcd='B2_P23_30-SA_30_1DB'; actarm='BNT162b2 Phase 2/3 (30 mcg) - BNT162b2SA (30 mcg) 1 booster'; end;
if trt01a='BNT162b2 Phase 2/3 (30 mcg)' and
trt02a='BNT162b2SA (30 mcg, 2 Doses)' then do; actarmcd='B2_P23_30-SA_30_2DB'; actarm='BNT162b2 Phase 2/3 (30 mcg) - BNT162b2SA (30 mcg) 2 booster';
end;
FDA-CBER-2022-5812-0072913
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] if trt01a='BNT162b2 Phase 2/3 (30 mcg)' and
trt02a='BNT162b2 (5 mcg, 1 Dose)' then do; actarmcd='B2_P23_30-B2_5_1DB'; actarm='BNT162b2 Phase 2/3 (30 mcg) - BNT162b2 (5 mcg) 1 booster'; end;
if trt01a='BNT162b2 Phase 2/3 (30 mcg)' and
trt02a='BNT162b2 (10 mcg, 1 Dose)' then do; actarmcd='B2_P23_30-B2_10_1DB'; actarm='BNT162b2 Phase 2/3 (30 mcg) - BNT162b2 (10 mcg) 1 booster'; end; end; else if missing(trt01a) and not missing(trt02a) and index(arm, 'booster') then do; actarm='Unplanned Treatment'; actarmcd='UNPLAN'; end; *actarm UNPLAN for Indeterminate;
if trt01a='Indeterminate' or (index(lowcase(arm), 'booster') and
trt02a='Indeterminate')then do; actarm='Unplanned Treatment'; actarmcd='UNPLAN'; end; TRT02PN=input(TRT02P, trtfmt.); TRT02AN=input(TRT02A, trtfmt.);
if randdt~=. then
TRTSEQP=catx(' => ', trt01p, trt02p);
if trtsdt~=. then
do; TRTSEQA=catx(' => ', trt01a, trt02a);
if missing(trt01a) and not missing(trt02a) then
TRTSEQA=strip(trt02a); end;run;
******************************************************************************************;
* Specification 3 *;* ADD PERIOD 2 DISPOSITION INFO *;* 1 - UNBLNDDT/REVXICDT. *;* 2 - EOT for Period 2. *;******************************************************************************************;*Add UNBLNDDT from DSSTDTC where DSDECOD='TREATMENT UNBLINDED';
proc sql;
create table _unblnd as select distinct usubjid, input(DSSTDTC, yymmdd10.) as UNBLNDDT format=date9. label="Treatment Unblinded Date" from DsSet where
FDA-CBER-2022-5812-0072914
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] DSDECOD="TREATMENT UNBLINDED" and DSSTDTC ne "" order by usubjid, unblnddt;
quit;
data _unblnd;
set _unblnd; by usubjid unblnddt;
if first.usubjid then
output;run;
data adsl;
merge adsl(in=a) _unblnd; by usubjid;
if a;
run;
*Add revax icd;data dsicd;
set DsSet; where dsdecod="INFORMED CONSENT OBTAINED" and not missing(dsstdtc);run;
proc sql undo_policy=none;
create table dsicd as select *, count(usubjid) as icdcnt from dsicd group by usubjid order by usubjid, dsstdtc; create table dsicd as select a.*, b.unblnddt from dsicd a left join adsl b on a.usubjid=b.usubjid;quit;
data dsicd;
set dsicd; where not missing(unblnddt) and icdcnt>1;run;
proc sort data=dsicd;
by usubjid descending dsstdt;run;
proc sort data=dsicd nodupkey;
by usubjid;run;
data adsl;
merge adsl(in=a) dsicd(keep=usubjid dsstdt rename=(dsstdt=REVXICDT)); label REVXICDT="Re-Informed Consent Date"; by usubjid;
if a;
run;
*Add EOT for open label;
FDA-CBER-2022-5812-0072915
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]proc sql;
create table dsopen as select a.*, b.qval as dsphase from dataprot.ds a left join dataprot.suppds b on a.usubjid=b.usubjid and a.dsseq=input(b.idvarval, best.) order by usubjid;quit;
data dsopen;
set dsopen; Attrib EotXDcDt Label="End Of Open Label Treatment D/C Date" Format=date9. EotXDcRs Label="End Of Open Label Treatment D/C Reason"; EotXDcDt=input(dsstdtc, yymmdd10.); EotXDcRs=dsdecod; where DSCAT="DISPOSITION EVENT" and DSPHASE="OPEN LABEL TREATMENT" and DSDECOD ne "COMPLETED";run;
data adsl;
merge adsl(in=a) dsopen(keep=usubjid EotXDcDt EotXDcRs); by usubjid;
if a;
run;
******************************************************************************************;
* Specification 4 *;* ADD OTHER BASELINE INFO *;* 1 - BMI category. *;* 2 - Comorbodities flag. *;* 3 - COVID baseline info. *;******************************************************************************************;*Add baseline BMI category;
data bmi;
set dataprot.vs; where (index(visit, "V1_DAY1") or index(visit, "V401_DAY1_VAX1")) and usubjid ne "" and vstestcd="BMI" and vsdy<=1;run;
data adsl;
merge adsl (in=a) bmi(keep=usubjid vsstresn); by usubjid;
if a;
label BMICAT="Baseline BMI Category" BMICATN="Baseline BMI Category (N)"; length BMICAT $20;
if vsstresn=. then
BMICAT="Missing";
if .<vsstresn<18.5 then
BMICAT="Underweight"; else if 18.5<=vsstresn<25 then
BMICAT="Normal weight";
FDA-CBER-2022-5812-0072916
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] else if 25<=vsstresn<30 then
BMICAT="Overweight";
else if 30<=vsstresn then BMICAT="Obese";
if BMICAT="Underweight" then
BMICATN=1; else if BMICAT="Normal weight" then BMICATN=2; else if BMICAT="Overweight" then BMICATN=3; else if BMICAT="Obese" then BMICATN=4; else if BMICAT="Missing" then BMICATN=5;run;
proc import datafile="&expath./bmi-12-15-scale.xlsx" out=adobmi dbms=xlsx
replace; getnames=no; datarow=2;run;
proc sort data=adobmi;
by A descending B;run;
data adobmim;
set adobmi(where=(A="Male")); B1=lag(B);
if missing(B1) then
B1=9999;run;
data adobmif;
set adobmi(where=(A="Female")); B1=lag(B);
if missing(B1) then
B1=9999;run;
data adobmi;
set adobmif adobmim;run;
proc sql undo_policy=none;
create table adsl as select a.*, b.c as obscut from adsl a left join adobmi b on b.B<=aaged/30.4375<b.B1 and 12<=floor((a.rficdt-a.brthdt)/365.25)<16 and ((a.sex="M" and b.A="Male") or (a.sex="F" and b.A="Female")) order by a.usubjid;quit;
FDA-CBER-2022-5812-0072917
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]data adsl(drop=vsstresn obscut);
set adsl;
label OBESEFL="Obese Flag for Adolescent";
if .<vsstresn<obscut then
OBESEFL="N"; else if vsstresn>=obscut>. then OBESEFL="Y";run;
*ADSL for Comorbodities - Xstart;%macro read_cci;
data filelst; retain filenum 0; rc=filename("dirpdf", "&expath"); openfile=dopen("dirpdf");
if openfile>0 then
do; nummem=dnum(openfile);
do ii=1 to nummem;
name=dread(openfile, ii);
if index(upcase(name), "REPORT-CCI") and index(upcase(name),"XLSX") then
do; filenum+1; output; end; end; end; call symput('filetot', filenum); run;
%do i=1 %to &filetot; proc sql;
select name into: filename separated by "" from filelst where filenum=&i; quit;
proc import datafile="&expath./&filename" out=fileout dbms=xlsx replace;
datarow=17; getnames=yes; run;
data fileout(drop=_A_);
set fileout(rename=(a=_A_)); length a $100.; a=_A_; run;
%if &i=1 %then
%do;
FDA-CBER-2022-5812-0072918
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] data out;
set fileout; run;
%end;
%else %do;
data out;
set out fileout; run;
%end;
%end;%mend;
%read_cci;proc sort data=out dupout=dupp nodupkey;
by B;run;
proc sql;
create table cci as select a.*, b.C from dataprot.mh a left join out b on a.MHPTCD=input(b.B, best.);quit;
proc sort data=cci nodupkey;
by usubjid; where not missing(C);run;
data adsl;
merge adsl(in=a) cci(in=b keep=usubjid); by usubjid;
if a;
label COMBODFL="Flag for Comorbodities";
if b then
COMBODFL="Y"; else COMBODFL="N";run;
*Xend;
*Get baseline information for efficacy;*Deal with retest;
proc sql;
create table is as select a.*, b.phasen from dataprot.is a left join adsl b on a.usubjid=b.usubjid;quit;
FDA-CBER-2022-5812-0072919
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]* version 3, according to team, no need to remove the original result when derive evaluable flags, 12May2021;
proc sort data=is out=is_rep;
by usubjid istestcd visitnum visit isdtc;run;
data is;
set is_rep; where (index(visit, "V1_DAY1_") or index(visit, "V401_DAY1_VAX1")) and istestcd in ('C19NIG'); ;run;
proc sort data=is;
by usubjid descending isorres;run;
proc sort data=is nodupkey;
by usubjid;run;
data isn;
set is; where isorres="NEG";run;
data adsl;
merge adsl(in=a) is(in=b keep=usubjid isorres isdy); by usubjid; label NIGV1FL="N-binding Antibody Neg at Visit 1 Flag";
if a; if isorres="NEG" and isdy<=1 then
NIGV1FL="Y"; else if isorres="POS" and isdy<=1 then NIGV1FL="N"; drop isorres isdy;run;
data mb;
set dataprot.mb; where (index(visit, "V1_DAY1_") or index(visit, "V401_DAY1_VAX1")) and mbtestcd='RTCOV2NS';run;
proc sort data=mb nodupkey;
by usubjid;run;
data mbn;
set mb; where mborres="NEG";
FDA-CBER-2022-5812-0072920
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]run;
data adsl;
merge adsl(in=a) mb(in=b keep=usubjid mborres mbdy); by usubjid; label NAATNFL="NAAT Negative at Visit 1 Flag";
if a; if mborres="NEG" and mbdy<=1 then
NAATNFL="Y"; else if mborres="POS" and mbdy<=1 then NAATNFL="N"; drop mborres mbdy;run;
data mh;
set dataprot.mh; where MHDECOD in ("Asymptomatic COVID-19" "COVID-19" "COVID-19 pneumonia" "COVID-19 treatment" "Suspected COVID-19" "SARS-CoV-2 antibody test positive" "SARS-CoV-2 carrier" "SARS-CoV-2 sepsis" "SARS-CoV-2 test positive" "SARS-CoV-2 viraemia" "Multisystem inflammatory syndrome in children");run;
data adsl(drop=isorres mborres isdy mbdy);
merge adsl(in=a) mh(in=b keep=usubjid) mb(in=c keep=usubjid mborres mbdy) is(in=d keep=usubjid isorres isdy); by usubjid;
if a;
label COVBLST="Baseline SARS-CoV-2 Status";
if b or (mborres="POS" and mbdy<=1) or (isorres="POS" and isdy<=1) then
COVBLST="POS";
if not b and (mborres="NEG" and mbdy<=1) and (isorres="NEG" and isdy<=1) then
COVBLST="NEG";run;
******************************************************************************************;
* Specification 5 *;* IMMUNOGENICITY DATA *;* 1 - Figure out subjects without V3/V4 but with COVID in window. *;* 2 - Replace V3/V4 using convalescent visits in window. *;* 3 - Combine info from CO and iS. *;******************************************************************************************;*Subjects with convalescent visits meeting requirement;
data co_rep co_other;
set dataprot.co;
if rdomain='IS' and coval='N' and coref='Sample Collected' then
output co_rep;
else
FDA-CBER-2022-5812-0072921
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] output co_other;
run;
data cocovall;
length covdtc $20.; set dataprot.co; where (index(visit, "COVID") or upcase(strip(visit))='V101_VAX3' or upcase(strip(visit))='V201_SURVEIL_CONSENT') and rdomain="IS" and COREF='Sample Collected' and COVAL="Y"; covvis=visit; covdtc=codtc; covdt=input(codtc, e8601da.); covvisnum=visitnum; format covdt is8601da.;run;
data pend_rep;
set co_rep; where visit="V302_WEEK1_POSTVAX3";run;
proc sql;
create table merge_sv as select a.*, b.svstdtc, c.vax201dt from pend_rep a left join (select distinct usubjid, visit, svstdtc from dataprot.sv)b on a.usubjid=b.usubjid and a.visit=b.visit left join adsl c on a.usubjid=c.usubjid;quit;
data rep_1;
set merge_sv; obs=_n_;
if not missing(svstdtc) then
do; sv_target=input(svstdtc, e8601da.); sv_lo=sv_target - 7; sv_hi=sv_target + 7; end;
if not missing(vax201dt) then
do; dos_lo=vax201dt + 6; dos_hi=vax201dt + 8; dos_target=vax201dt + 7; end; format sv_target sv_lo sv_hi dos_lo dos_hi dos_target is8601da.;run;
proc sql;
create table rep_2 as select a.*, b.covdt, b.covvis, b.covvisnum, b.covdtc from rep_1 a left join cocovall b on a.usubjid=b.usubjid and ((.< a.sv_lo <=b.covdt <=a.sv_hi) or (.< a.dos_lo <=b.covdt <=a.dos_hi)) order by obs;
quit;
FDA-CBER-2022-5812-0072922
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]data rep_3;
set rep_2;
if not missing(covdt) then
do;
if not missing(sv_target) then
diff=abs(covdt - sv_target); else if not missing(dos_target) then diff=abs(covdt - dos_target); else diff=99999; end;
proc sort;
by obs diff;run;
data rep_a;
set rep_3; by obs diff;
if not missing(covdt) then
do; codtc=put(covdt, is8601da.); coval='Y'; replace_fl='Y'; end;
if first.obs then
output;run;
;data pend_rep;
set co_rep; where visit="V303_MONTH1_POSTVAX3";run;
proc sql;
create table merge_sv as select a.*, b.svstdtc, c.vax201dt from pend_rep a left join (select distinct usubjid, visit, svstdtc from dataprot.sv)b on a.usubjid=b.usubjid and a.visit=b.visit left join adsl c on a.usubjid=c.usubjid;quit;
data rep_1;
set merge_sv; obs=_n_;
if not missing(svstdtc) then
do;
FDA-CBER-2022-5812-0072923
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] sv_target=input(svstdtc, e8601da.);
sv_lo=sv_target - 7;
sv_hi=sv_target + 7; end;
if not missing(vax201dt) then
do; dos_lo=vax201dt + 28; dos_hi=vax201dt + 42; dos_target=vax201dt + 30; end; format sv_target sv_lo sv_hi dos_lo dos_hi dos_target is8601da.;run;
proc sql;
create table rep_2 as select a.*, b.covdt, b.covvis, b.covvisnum, b.covdtc from rep_1 a left join cocovall b on a.usubjid=b.usubjid and ((.< a.sv_lo <=b.covdt <=a.sv_hi) or (.< a.dos_lo <=b.covdt <=a.dos_hi)) order by obs;quit;
data rep_3;
set rep_2;
if not missing(covdt) then
do;
if not missing(sv_target) then
diff=abs(covdt - sv_target); else if not missing(dos_target) then diff=abs(covdt - dos_target); else diff=99999; end;
proc sort;
by obs diff;run;
data rep_b;
set rep_3; by obs diff;
if not missing(covdt) then
do; codtc=put(covdt, is8601da.); coval='Y'; replace_fl='Y'; end;
if first.obs then
output;run;
FDA-CBER-2022-5812-0072924
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM];
data pend_rep;
set co_rep; where visit="V3_MONTH1_POSTVAX2_L";run;
proc sql;
create table merge_sv as select a.*, b.svstdtc, c.vax102dt from pend_rep a left join (select distinct usubjid, visit, svstdtc from dataprot.sv)b on a.usubjid=b.usubjid and a.visit=b.visit left join adsl c on a.usubjid=c.usubjid;quit;
data rep_1;
set merge_sv; obs=_n_;
if not missing(svstdtc) then
do; sv_target=input(svstdtc, e8601da.); sv_lo=sv_target - 7; sv_hi=sv_target + 7; end;
if not missing(vax102dt) then
do; dos_lo=vax102dt + 28; dos_hi=vax102dt + 42; dos_target=vax102dt + 30; end; format sv_target sv_lo sv_hi dos_lo dos_hi dos_target is8601da.;run;
proc sql;
create table rep_2 as select a.*, b.covdt, b.covvis, b.covvisnum, b.covdtc from rep_1 a left join cocovall b on a.usubjid=b.usubjid and ((.< a.sv_lo <=b.covdt <=a.sv_hi) or (.< a.dos_lo <=b.covdt <=a.dos_hi)) order by obs;quit;
data rep_3;
set rep_2;
if not missing(covdt) then
do;
if not missing(sv_target) then
diff=abs(covdt - sv_target); else if not missing(dos_target) then diff=abs(covdt - dos_target); else diff=99999;
end;
FDA-CBER-2022-5812-0072925
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]proc sort;
by obs diff;run;
data rep_c;
set rep_3; by obs diff;
if not missing(covdt) then
do; codtc=put(covdt, is8601da.); coval='Y'; replace_fl='Y'; end;
if first.obs then
output;run;
;data pend_rep;
set co_rep; where visit="V4_MONTH6_L";run;
proc sql;
create table merge_sv as select a.*, b.svstdtc, c.vax102dt from pend_rep a left join (select distinct usubjid, visit, svstdtc from dataprot.sv)b on a.usubjid=b.usubjid and a.visit=b.visit left join adsl c on a.usubjid=c.usubjid;quit;
data rep_1;
set merge_sv; obs=_n_;
if not missing(svstdtc) then
do; sv_target=input(svstdtc, e8601da.); sv_lo=sv_target - 7; sv_hi=sv_target + 7; end;
if not missing(vax102dt) then
do; dos_lo=vax102dt + 175; dos_hi=vax102dt + 189; dos_target=vax102dt + 180; end; format sv_target sv_lo sv_hi dos_lo dos_hi dos_target is8601da.;run;
FDA-CBER-2022-5812-0072926
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]proc sql;
create table rep_2 as select a.*, b.covdt, b.covvis, b.covvisnum, b.covdtc
from rep_1 a left join cocovall b on a.usubjid=b.usubjid and ((.< a.sv_lo <=b.covdt <=a.sv_hi) or (.< a.dos_lo <=b.covdt <=a.dos_hi)) order by obs;quit;
data rep_3;
set rep_2;
if not missing(covdt) then
do;
if not missing(sv_target) then
diff=abs(covdt - sv_target); else if not missing(dos_target) then diff=abs(covdt - dos_target); else diff=99999; end;
proc sort;
by obs diff;run;
data rep_d;
set rep_3; by obs diff;
if not missing(covdt) then
do; codtc=put(covdt, is8601da.); coval='Y'; replace_fl='Y'; end;
if first.obs then
output;run;
;data pend_rep;
set co_rep; where visit="V7_MONTH1_S";run;
proc sql;
create table merge_sv as select a.*, b.svstdtc, c.vax102dt from pend_rep a left join (select distinct usubjid, visit, svstdtc from dataprot.sv)b on a.usubjid=b.usubjid and a.visit=b.visit left join adsl c on a.usubjid=c.usubjid;quit;
FDA-CBER-2022-5812-0072927
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]data rep_1;
set merge_sv;
obs=_n_;
if not missing(svstdtc) then
do; sv_target=input(svstdtc, e8601da.); sv_lo=sv_target - 7; sv_hi=sv_target + 7; end;
if not missing(vax102dt) then
do; dos_lo=vax102dt + 28; dos_hi=vax102dt + 42; dos_target=vax102dt + 30; end; format sv_target sv_lo sv_hi dos_lo dos_hi dos_target is8601da.;run;
proc sql;
create table rep_2 as select a.*, b.covdt, b.covvis, b.covvisnum, b.covdtc from rep_1 a left join cocovall b on a.usubjid=b.usubjid and ((.< a.sv_lo <=b.covdt <=a.sv_hi) or (.< a.dos_lo <=b.covdt <=a.dos_hi)) order by obs;quit;
data rep_3;
set rep_2;
if not missing(covdt) then
do;
if not missing(sv_target) then
diff=abs(covdt - sv_target); else if not missing(dos_target) then diff=abs(covdt - dos_target); else diff=99999; end;
proc sort;
by obs diff;run;
data rep_e;
set rep_3; by obs diff;
if not missing(covdt) then
do; codtc=put(covdt, is8601da.); coval='Y';
replace_fl='Y';
FDA-CBER-2022-5812-0072928
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] end;
if first.obs then
output;run;
;data pend_rep;
set co_rep; where visit="V8_MONTH6_S";run;
proc sql;
create table merge_sv as select a.*, b.svstdtc, c.vax102dt from pend_rep a left join (select distinct usubjid, visit, svstdtc from dataprot.sv)b on a.usubjid=b.usubjid and a.visit=b.visit left join adsl c on a.usubjid=c.usubjid;quit;
data rep_1;
set merge_sv; obs=_n_;
if not missing(svstdtc) then
do; sv_target=input(svstdtc, e8601da.); sv_lo=sv_target - 7; sv_hi=sv_target + 7; end;
if not missing(vax102dt) then
do; dos_lo=vax102dt + 175; dos_hi=vax102dt + 189; dos_target=vax102dt + 180; end; format sv_target sv_lo sv_hi dos_lo dos_hi dos_target is8601da.;run;
proc sql;
create table rep_2 as select a.*, b.covdt, b.covvis, b.covvisnum, b.covdtc from rep_1 a left join cocovall b on a.usubjid=b.usubjid and ((.< a.sv_lo <=b.covdt <=a.sv_hi) or (.< a.dos_lo <=b.covdt <=a.dos_hi)) order by obs;quit;
data rep_3;
set rep_2;
if not missing(covdt) then
do;
if not missing(sv_target) then
FDA-CBER-2022-5812-0072929
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] diff=abs(covdt - sv_target);
else if not missing(dos_target) then
diff=abs(covdt - dos_target); else diff=99999; end;
proc sort;
by obs diff;run;
data rep_f;
set rep_3; by obs diff;
if not missing(covdt) then
do; codtc=put(covdt, is8601da.); coval='Y'; replace_fl='Y'; end;
if first.obs then
output;run;
;data pend_rep;
set co_rep; where visit="V404_MONTH1_POSTVAX2";run;
proc sql;
create table merge_sv as select a.*, b.svstdtc, c.vax102dt from pend_rep a left join (select distinct usubjid, visit, svstdtc from dataprot.sv)b on a.usubjid=b.usubjid and a.visit=b.visit left join adsl c on a.usubjid=c.usubjid;quit;
data rep_1;
set merge_sv; obs=_n_;
if not missing(svstdtc) then
do; sv_target=input(svstdtc, e8601da.); sv_lo=sv_target - 7; sv_hi=sv_target + 7; end;
if not missing(vax102dt) then
do;
dos_lo=vax102dt + 28;
FDA-CBER-2022-5812-0072930
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] dos_hi=vax102dt + 42;
dos_target=vax102dt + 30;
end; format sv_target sv_lo sv_hi dos_lo dos_hi dos_target is8601da.;run;
proc sql;
create table rep_2 as select a.*, b.covdt, b.covvis, b.covvisnum, b.covdtc from rep_1 a left join cocovall b on a.usubjid=b.usubjid and ((.< a.sv_lo <=b.covdt <=a.sv_hi) or (.< a.dos_lo <=b.covdt <=a.dos_hi)) order by obs;quit;
data rep_3;
set rep_2;
if not missing(covdt) then
do;
if not missing(sv_target) then
diff=abs(covdt - sv_target); else if not missing(dos_target) then diff=abs(covdt - dos_target); else diff=99999; end;
proc sort;
by obs diff;run;
data rep_g;
set rep_3; by obs diff;
if not missing(covdt) then
do; codtc=put(covdt, is8601da.); coval='Y'; replace_fl='Y'; end;
if first.obs then
output;run;
;data co_replace;
set co_other co_rep(where=(visit not in ('V302_WEEK1_POSTVAX3' 'V303_MONTH1_POSTVAX3' 'V3_MONTH1_POSTVAX2_L' 'V4_MONTH6_L' 'V7_MONTH1_S' 'V8_MONTH6_S' 'V404_MONTH1_POSTVAX2'))) rep_a rep_b rep_c rep_d rep_e rep_f rep_g;
FDA-CBER-2022-5812-0072931
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] if not missing(codtc) then
codate=input(codtc, e8601da.);
format codate is8601da.;run;
*replace v301 by v4;data v301_miss v301_ex;
set co_replace;
if coval='N' and rdomain='IS' and coref='Sample Collected' and
visit='V301_VAX3' then output v301_miss; else output v301_ex;run;
proc sql;
create table v301_miss2 as select a.*, b.codtc as v4dtc, c.vax201dt as dose3dt from v301_miss a left join (select usubjid, codtc from dataprot.co where coval='Y' and rdomain='IS' and coref="Sample Collected" and visit='V4_MONTH6_L') b on a.usubjid=b.usubjid left join adsl c on a.usubjid=c.usubjid;quit;
data v301_miss3;
set v301_miss2;
if not missing(v4dtc) and not missing(dose3dt) then
do; codtc=v4dtc; coval='Y'; end;run;
data co_replace;
set v301_miss3 v301_ex;
if not missing(codtc) then
codate=input(codtc, e8601da.); format codate is8601da.;
if rdomain='IS' and coval='Y' and coref='Sample Collected';
run;
data co_rep_record;
set co_replace;
if not missing(covdtc);
run;
proc sql;
create table isnew0 as select a.*, b.visit as mvis, b.visitnum as mvisnum,
b.covvisnum from is_rep a left join co_rep_record b on a.usubjid=b.usubjid
FDA-CBER-2022-5812-0072932
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] and a.visitnum=b.covvisnum and a.isdtc=b.covdtc;
quit;
data isnew;
set isnew0;
if not missing(covvisnum) and (index(visit, "COVID") or
upcase(strip(visit))='V101_VAX3' or upcase(strip(visit))='V201_SURVEIL_CONSENT') then do; visit=mvis; visitnum=mvisnum; end;run;
proc sql;
create table isva as select a.*, b.cohortn, b.vax101dt, b.vax102dt, b.vax10Udt, b.vax201dt , b.vax202dt from isnew a left join adsl b on a.usubjid=b.usubjid order by usubjid;quit;
data isva;
set isva; format isdate date9.;
if not missing(isdtc) then
isdate=input(isdtc, yymmdd10.);
if not missing(vax202dt) and index(visit, 'POSTVAX4') then
do; novax=4; diff=isdate-vax202dt; end; else if not missing(vax201dt) and index(visit, 'POSTVAX3') then do; novax=3; diff=isdate-vax201dt; end; else if not missing(vax102dt) and index(visit, "_VAX1")=0 and index(visit, "_POSTVAX1")=0 and index(visit, "_VAX2")=0 then do; novax=2; diff=isdate-vax102dt; end; else if not missing(vax101dt) then do; novax=1; diff=isdate-vax101dt; end;run;
proc sort data=co_replace out=co_replace_1(keep=usubjid coval visitnum visit)
nodupkey;
by usubjid visitnum;
FDA-CBER-2022-5812-0072933
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]run;
proc transpose data=co_replace_1 out=t_co_replace_1 prefix=covis;
by usubjid; id visitnum; idlabel visit; var coval;run;
proc sort data=co_replace out=co_replace_2(keep=usubjid codate visitnum visit)
nodupkey; by usubjid visitnum;run;
proc transpose data=co_replace_2 out=t_co_replace_2 prefix=codt;
by usubjid; id visitnum; idlabel visit; var codate;run;
******************************************************************************************;
* Specification 6 *;* ADVERSE EVENT CUTOFF *;* 1 -1/6 month(s) follow up date in double blind period from blood sample. *;* 2 -1/6 month(s) follow up date in open label period from blood sample. *;* 3 -1/6 month(s) follow up date in double blind period from SV. *;* 4 -1/6 month(s) follow up date in open label period from SV. *;******************************************************************************************;
proc sql;
create table sv as select a.*, input(svstdtc, yymmdd10.) as svstdt, b.cohortn from dataprot.sv a left join adsl b on a.usubjid=b.usubjid;quit;
proc sql;
create table co_m as select a.*, b.cohortn from dataprot.co a left join adsl b on a.usubjid=b.usubjid;quit;
data v0xdt;
set co_m;
if coref='Sample Collected'; if not missing(codtc);
bedt=input(codtc, yymmdd10.); where not (cohortn=1.16 and visitnum in (60751 60752 60753 60754));
proc sort nodupkey;
by usubjid visitnum codtc;run;
data adsl;
FDA-CBER-2022-5812-0072934
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] merge adsl (in=a) v0xdt(keep=usubjid bedt visit cohortn rename=(bedt=be1dt)
where=(index(visit, "V103_")=0 and ((index(visit, "_MONTH1_") and cohortn ne
1.16 and index(visit, 'POSTVAX3') eq 0 and index(visit, 'POSTVAX4') eq 0) or (visit="V7_MONTH1_S_R") and cohortn=1.16))) v0xdt(keep=usubjid bedt visit cohortn rename=(bedt=be2dt) where=(index(visit, "V104_")=0 and index(visit, "_MONTH6_"))) v0xdt(keep=usubjid bedt visit cohortn rename=(bedt=be3dt) where=(visit in ("V103_MONTH1" "V305_MONTH1_POSTVAX4"))) v0xdt(keep=usubjid bedt visit cohortn rename=(bedt=be3_1dt) where=(visit in ("V8C_MONTH1_POSTVAX3" "V303_MONTH1_POSTVAX3"))) v0xdt(keep=usubjid bedt visit cohortn rename=(bedt=be4dt) where=(visit in ("V104_MONTH6"))) v0xdt(keep=usubjid bedt visit cohortn rename=(bedt=be4_1dt) where=(visit in ("V306_MONTH6"))) sv(keep=usubjid svstdt visit cohortn rename=(svstdt=be1dt2) where=(index(visit, "V103_")=0 and ((index(visit, "_MONTH1_") and cohortn ne 1.16 and index(visit, 'POSTVAX3') eq 0 and index(visit, 'POSTVAX4') eq 0) or (visit="V7_MONTH1_S_R") and cohortn=1.16))) sv(keep=usubjid svstdt visit cohortn rename=(svstdt=be2dt2) where=(index(visit, "V104_")=0 and index(visit, "_MONTH6_"))) sv(keep=usubjid svstdt visit cohortn rename=(svstdt=be3dt2) where=(visit in ("V103_MONTH1" "V305_MONTH1_POSTVAX4"))) sv(keep=usubjid svstdt visit cohortn rename=(svstdt=be3_1dt2) where=(visit in ("V8C_MONTH1_POSTVAX3" "V303_MONTH1_POSTVAX3"))) sv(keep=usubjid svstdt visit cohortn rename=(svstdt=be4dt2) where=(visit in ("V104_MONTH6"))) sv(keep=usubjid svstdt visit cohortn rename=(svstdt=be4_1dt2) where=(visit in ("V306_MONTH6"))); by usubjid;
if a;
attrib V01DT label="Date of Unblinding or Visit at 1MPD2" format=date9. V02DT label="Date of Unblinding or Visit at 6MPD2" format=date9. V02OBDT label="Date of Dose 3 or Visit at 6MPD2" format=date9. V03DT label="Date of Visit at 1M after Vax3/4" format=date9. V04DT label="Date of Visit at 6M after Vax3/4" format=date9.;
if not missing(VAX10UDT) and VAX10UDT>VAX102DT then
V01DT=VAX10UDT+35; else if not missing(be1dt) then V01DT=be1dt; else if not missing(be1dt2) then V01DT=be1dt2; else if not missing(VAX102DT) then V01DT=VAX102DT+35; else if not missing(VAX101DT) then V01DT=VAX101DT+58;
if not missing(VAX10UDT) and VAX10UDT>VAX102DT then
V02DT=VAX10UDT+189; else if not missing(be2dt) then V02DT=be2dt; else if not missing(be2dt2) then V02DT=be2dt2; else if not missing(VAX102DT) then V02DT=VAX102DT+189; else if not missing(VAX101DT) then
V02DT=VAX101DT+189+23;
FDA-CBER-2022-5812-0072935
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] *Cutoff V01DT V02DT by UNBLNDDT Treatment unblinded Date;
if (v02dt>=tr02sdt>. or (v02dt=. and tr02sdt>.)) then
V02OBDT=tr02sdt-1; else V02OBDT=V02DT;
if UNBLNDDT~=. then
do;
if V01DT~=. and V01DT>(UNBLNDDT-1) then
V01DT=UNBLNDDT-1;
if V02DT~=. and V02DT>(UNBLNDDT-1) then
V02DT=UNBLNDDT-1; end;
if index(trt02p, '1 Dose') then
do;
if not missing(VAX20UDT) and VAX20UDT>VAX201DT then
V03DT=VAX20UDT+35; else if not missing(be3_1dt) then V03DT=be3_1dt; else if not missing(be3_1dt2) then V03DT=be3_1dt2; else if not missing(VAX201DT) then V03DT=VAX201DT+35;
if not missing(VAX20UDT) and VAX20UDT>VAX201DT then
V04DT=VAX20UDT+189; else if not missing(be4_1dt) then V04DT=be4_1dt; else if not missing(be4_1dt2) then V04DT=be4_1dt2; else if not missing(VAX201DT) then V04DT=VAX201DT+189; end; else if index(trt02p, '2 Doses') then do;
if not missing(VAX20UDT) and VAX20UDT>VAX202DT then
V03DT=VAX20UDT+35; else if not missing(be3dt) then V03DT=be3dt; else if not missing(be3dt2) then V03DT=be3dt2; else if not missing(VAX202DT) then V03DT=VAX202DT+35; else if not missing(VAX201DT) then V03DT=VAX201DT+35+35;
if not missing(VAX20UDT) and VAX20UDT>VAX202DT then
V04DT=VAX20UDT+189;
FDA-CBER-2022-5812-0072936
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] else if not missing(be4dt) then
V04DT=be4dt;
else if not missing(be4dt2) then V04DT=be4dt2; else if not missing(VAX202DT) then V04DT=VAX202DT+189; else if not missing(VAX201DT) then V04DT=VAX201DT+189+35; end; else do;
if not missing(VAX20UDT) and VAX20UDT>VAX202DT then
V03DT=VAX20UDT+35; else if not missing(be3dt) then V03DT=be3dt; else if not missing(be3dt2) then V03DT=be3dt2; else if not missing(VAX202DT) then V03DT=VAX202DT+35; else if not missing(VAX201DT) then V03DT=VAX201DT+58;
if not missing(VAX20UDT) and VAX20UDT>VAX202DT then
V04DT=VAX20UDT+189; else if not missing(be4dt) then V04DT=be4dt; else if not missing(be4dt2) then V04DT=be4dt2; else if not missing(VAX202DT) then V04DT=VAX202DT+189; else if not missing(VAX201DT) then V04DT=VAX201DT+189+23; end;
if missing(vax201dt) and missing(vax202dt) and missing(vax20udt) then
do; V03DT=.; V04DT=.; end;run;
proc sort data=adsl;
by usubjid;run;
******************************************************************************************;
* Specification 7 *;* BLOOD SAMPLE DRAWN *;* 1 - Blood sampel drawn date and flags. *;* 2 - Inclusion/exclusion flags. *;* 3 - PD & Immuno pop flags. *;******************************************************************************************;
*Blood sample obtained from CO;
FDA-CBER-2022-5812-0072937
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]proc sort data=isva out=isva1(keep=usubjid diff visitnum visit) nodupkey;
by usubjid visitnum; where isorres not in ("" "NOT DONE") and not missing(istest);run;
proc transpose data=isva1 out=t_isva1 prefix=vis;
by usubjid; id visitnum; idlabel visit; var diff;run;
proc sort data=isva out=isva2(keep=usubjid isdate visitnum visit) nodupkey;
by usubjid visitnum; where isorres not in ("" "NOT DONE") and not missing(istest);run;
proc transpose data=isva2 out=t_isva2 prefix=isdt;
by usubjid; id visitnum; idlabel visit; var isdate;run;
proc sql;
create table dv as select a.usubjid, a.dvstdtc, a.dvseq, a.epoch as epoch_dv, b.qval as cape from dataprot.dv a right join dataprot.suppdv(where=(QNAM="CAPE" and upcase(QVAL) not in (" " "NO"))) b on a.usubjid=b.usubjid and a.dvseq=input(b.idvarval, best.) order by usubjid, dvseq;quit;
proc sort data=adsl;
by usubjid;run;
data dv;
merge dv(in=a) adsl(in=b keep=usubjid vax201dt); by usubjid;
if a; if length(dvstdtc) ge 10 then
_dvdt=input(dvstdtc, e8601da.);run;
proc sql;
create table dvdate as select distinct usubjid, min(input(dvstdtc, yymmdd10.)) as dvstdt label="Start Date of Important PD" format=date9. from dv where dvstdtc ne "" group by usubjid; create table dvdate_p1 as select distinct usubjid, min(input(dvstdtc, yymmdd10.)) as POP1PDDT label="First PD date for safety" format=date9. from
dv where dvstdtc ne "" and index(cape, "POP1") group by usubjid;
FDA-CBER-2022-5812-0072938
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] create table dvdate_p2 as select distinct usubjid, min(input(dvstdtc,
yymmdd10.)) as POP2PDDT label="First PD date for efficacy" format=date9. from
dv where dvstdtc ne "" and index(cape, "POP2") group by usubjid; create table dvdate_p3 as select distinct usubjid, min(input(dvstdtc, yymmdd10.)) as POP3PDDT label="First PD date for immunogenicity" format=date9. from dv where dvstdtc ne "" and index(cape, "POP3") group by usubjid; create table period1_pop3 as select distinct usubjid from dv where dvstdtc ne "" and index(cape, "POP3") and ((.<_dvdt < vax201dt) or missing(vax201dt)) order by usubjid; create table dvout_0 as select distinct a.usubjid, b.dvstdt, c.usubjid as safety, d.usubjid as efficacy, e.usubjid as immuno, f.usubjid as multiple, g.usubjid as siteexcld from dv a left join dvdate b on a.usubjid=b.usubjid left join (select distinct usubjid from dv where index(cape, "POP1")) c on a.usubjid=c.usubjid left join (select distinct usubjid from dv where index(cape, "POP2")) d on a.usubjid=d.usubjid left join (select distinct usubjid from dv where index(cape, "POP3")) e on a.usubjid=e.usubjid left join (select distinct usubjid from dv where index(cape, "POP4")) f on a.usubjid=f.usubjid left join (select distinct usubjid from dv where index(cape, "POP5")) g on a.usubjid=g.usubjid; create table dvout as select a.*, b.pop1pddt, c.pop2pddt, d.pop3pddt, e.usubjid as period1_pop3 from dvout_0 a left join dvdate_p1 b on a.usubjid=b.usubjid left join dvdate_p2 c on a.usubjid=c.usubjid left join dvdate_p3 d on a.usubjid=d.usubjid left join period1_pop3 e on a.usubjid=e.usubjid;quit;
proc sort data=dataprot.ie out=ie(keep=usubjid domain) nodupkey;
by usubjid; where visit not in ("V101_VAX3" "V301_VAX3");run;
*have N-binding antibody test result available at the 1-month post-Dose 2 visit;data nbind;
set isva; label V3C19NIG="C19NIG Result at Visit 3"; V3C19NIG=isorres; keep usubjid V3C19NIG; where not missing(isorres) and istestcd="C19NIG" and index(visit, "V103_")=0 and ((index(visit, "_MONTH1_") and index(visit, 'POSTVAX3')=0 and index(visit, 'POSTVAX4')=0 and cohortn ne 1.16) or (visit="V7_MONTH1_S_R") and cohortn=1.16);run;
proc sort data=nbind nodupkey;
by usubjid;run;
*Valid IS result after Dose 1 but before Dose 2/after Dose 2 - Planned visits;data incl3p;
set isva;
FDA-CBER-2022-5812-0072939
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] if istestcd^="C19NIG" and isorres not in ("" "IND" "QNS" "NOT DONE");
if not missing(vax101dt) and isdate > vax101dt;
if isdate <=vax102dt or (vax102dt=. and vax201dt ne . and vax101dt <=vax201dt)
or (vax102dt=. and vax201dt=. and vax202dt ne . and vax101dt <=vax202dt) or (vax102dt=. and vax201dt=. and vax202dt=.);
proc sort nodupkey;
by usubjid;run;
data incl8p;
set isva;
if istestcd^="C19NIG" and isorres not in ("" "IND" "QNS" "NOT DONE"); if not missing(vax102dt) and isdate > vax102dt; if isdate <=vax201dt or (vax201dt=. and vax202dt ne . and isdate <=vax202dt)
or (vax201dt=. and vax202dt=.);
proc sort nodupkey;
by usubjid;run;
*Valid IS result after Dose 1 but before Dose 2/after Dose 2 - All;proc sql;
create table adsl_tmp as select a.*, b.svstdtc as v5p1, c.svstdtc as v3p2 from adsl a left join dataprot.sv b on a.usubjid=b.usubjid and a.phasen=1 and ((b.visit='V5_WEEK1_POSTVAX2_S' and a.cohortn ne 1.16) or (b.visit='V5_WEEK1_POSTVAX2_S_R' and a.cohortn eq 1.16)) left join dataprot.sv c on a.usubjid=c.usubjid and phasen ne 1 and (c.visit='V3_MONTH1_POSTVAX2_L' or c.visit='V404_MONTH1_POSTVAX2') order by a.usubjid;quit;
data adsl;
set adsl_tmp;
proc sort;
by usubjid;run;
*RSEXSAF;data pop5_0;
set dv;
if index(cape, 'YES-POP5');proc sort;
by usubjid;
FDA-CBER-2022-5812-0072940
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]run;
data pop5_1;
set pop5_0; by usubjid; length comb $200.; retain comb;
if first.usubjid then
comb=cape; else comb=catx(';', comb, cape);
if last.usubjid then
output;run;
data pop5_2(keep=usubjid pop5_txt);
length pop5_txt $200.; set pop5_1;
if index(comb, 'YES-POP1') and index(comb, 'YES-POP2') and index(comb,
'YES-POP3') then pop5_txt='Unreliable data due to lack of PI oversight - Safety, Efficacy, Immunogenicity Population(s)'; else if index(comb, 'YES-POP1') and index(comb, 'YES-POP2') then pop5_txt='Unreliable data due to lack of PI oversight - Safety, Efficacy Population(s)'; else if index(comb, 'YES-POP1') and index(comb, 'YES-POP3') then pop5_txt='Unreliable data due to lack of PI oversight - Safety, Immunogenicity Population(s)'; else if index(comb, 'YES-POP2') and index(comb, 'YES-POP3') then pop5_txt='Unreliable data due to lack of PI oversight - Efficacy, Immunogenicity Population(s)'; else if index(comb, 'YES-POP1') then pop5_txt='Unreliable data due to lack of PI oversight - Safety Population(s)'; else if index(comb, 'YES-POP2') then pop5_txt='Unreliable data due to lack of PI oversight - Efficacy Population(s)'; else if index(comb, 'YES-POP3') then pop5_txt='Unreliable data due to lack of PI oversight - Immunogenicity Population(s)'; else pop5_txt='';
proc sort;
by usubjid;run;
data adsl(drop=pop5_txt);
merge adsl(in=a) ie(rename=(domain=INEX)) t_isva1 t_isva2 t_co_replace_1 t_co_replace_2 nbind sv(keep=usubjid visit svstdt cohortn rename=(svstdt=visit3dt) where=(index(visit, "V103_")=0 and ((index(visit, "_MONTH1_") and index(visit, 'POSTVAX3')=0 and index(visit, 'POSTVAX4')=0 and cohortn ne 1.16) or (visit="V7_MONTH1_S_R") and cohortn=1.16))) sv(keep=usubjid visit svstdt cohortn rename=(svstdt=m1pv3dt) where=(index(visit, "MONTH1") and index(visit, "POSTVAX3"))) sv(keep=usubjid visit svstdt cohortn rename=(svstdt=m1pv4dt) where=(index(visit, "MONTH1") and index(visit, "POSTVAX4"))) sv(keep=usubjid visit svstdt cohortn
rename=(svstdt=w3pv1dt) where=((cohortn ne 1.16 and visit='V4_WEEK3_VAX2_S')
FDA-CBER-2022-5812-0072941
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] or (cohortn eq 1.16 and visit='V4_WEEK3_VAX2_S_R'))) dvout (keep=usubjid
dvstdt safety efficacy immuno multiple siteexcld pop1pddt pop2pddt pop3pddt
period1_pop3) pop5_2 incl3p(in=incl3p keep=usubjid) incl8p(in=incl8p keep=usubjid); by usubjid;
if a;
attrib BLDV1FL label="Blood Sample Drawn before Vax 1" BLDV2FL label="Blood Sample Drawn 1 Week after Vax 1" BLDV3FL label="Blood Sample Drawn before Vax 2" BLDV4FL label="Blood Sample Drawn 1 Week after Vax 2" BLDV5FL label="Blood Sample Drawn 2 Weeks after Vax 2" BLDV6FL label="Blood Sample Drawn 1 Month after Vax 2" BLDV7FL label="Blood Sample Drawn 6 Months after Vax 2" BLDV1DT label="Blood Sample Date before Vax 1" format=date9. BLDV2DT label="Blood Sample Date 1 Week after Vax 1" format=date9. BLDV3ADT label="Additional Bld Sample Date 3W after Vax1" format=date9. BLDV4ADT label="Additional Bld Sample Date 4W after Vax1" format=date9. BLDV5ADT label="Additional Bld Sample Date 5W after Vax1" format=date9. BLDV6ADT label="Additional Bld Sample Date 7W after Vax1" format=date9. BLDV3DT label="Blood Sample Date before Vax 2" format=date9. BLDV4DT label="Blood Sample Date 1 Week after Vax 2" format=date9. BLDV5DT label="Blood Sample Date 2 Weeks after Vax 2" format=date9. BLDV6DT label="Blood Sample Date 1 Month after Vax 2" format=date9. BLDV7DT label="Blood Sample Date 6 Months after Vax 2" format=date9. INCL1FL label="Are eligible for the study at rand" INCL2FL label="Have received Vax 1 as randomized" INCL3FL label="Have valid and DTM immuno result 1" INCL4FL label="Have valid and DTM immuno result 2" INCL5FL label="Have BD within the timeframe 1" INCL6FL label="No important PD determined by clinician" INCL7FL label="Received 2 doses as rand within window" INCL8FL label="Have valid and DTM immuno result 3" INCL9FL label="Have valid immuno within timeframe 2" INCL10FL label="Unblinded after 1M post Dose 2 visit" INCL17FL label="Have N-Binding result PD2" EXCL1FL label="Exclusion Flag 1" EXCRIT1 label="Exclusion Criterion 1" format=$200. EXCL2FL label="Exclusion Flag 2" EXCRIT2 label="Exclusion Criterion 2" format=$200. EXCL3FL label="Exclusion Flag 3" EXCRIT3 label="Exclusion Criterion 3" format=$200. EXCL4FL label="Exclusion Flag 4" EXCRIT4 label="Exclusion Criterion 4" format=$200. EXCL5FL label="Exclusion Flag 5" EXCRIT5 label="Exclusion Criterion 5" format=$200. EXCL6FL label="Exclusion Flag 6" EXCRIT6 label="Exclusion Criterion 6" format=$200. RSEXSAF label="Reason for Exclusion from Safety Pop" format=$200. EXCL7FL label="Exclusion Flag 7" EXCRIT7 label="Exclusion Criterion 7" format=$200. EXCL8FL label="Exclusion Flag 8" EXCRIT8 label="Exclusion Criterion 8" format=$200. EXCL9FL label="Exclusion Flag 9" EXCRIT9 label="Exclusion Criterion 9" format=$200. EXCL10FL label="Exclusion Flag 10" EXCRIT10 label="Exclusion Criterion 10" format=$200. EXCL17FL label="Exclusion Flag 17" EXCRIT17 label="Exclusion Criterion 17" format=$200. EVAL01FL label="Dose 1 evaluable Immun Popu Flag" EVAL02FL label="Dose 2 evaluable Immun Popu Flag" AAI01FL label="Dose 1 all-available Immun Popu Flag" AAI02FL
label="Dose 2 all-available Immun Popu Flag" EVALEFFL
FDA-CBER-2022-5812-0072942
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] label="Evaluable Efficacy Popu Flag" EV14EFFL
label="Evaluable Efficacy Popu Flag - 14 days" EV1MEFFL
label="Evaluable Efficacy Popu Flag - 1 month" VASEFFL label="Evaluable Efficacy Pop Flag - asympt" EVSCEFFL label="Evaluable Efficacy Pop Flag - seroconv" AAI1EFFL label="Dose 1 all-available Efficacy Popu Flag" AAI2EFFL label="Dose 2 all-available Efficacy Popu Flag" AAI2ASFL label="Dose 2 all-available Asympt Popu Flag";
if not missing(pop5_txt) then
RSEXSAF=strip(pop5_txt); else if not missing(safety) then RSEXSAF="Did not provide informed consent";
if not missing(covis60765) then
BLDV1FL="Y"; else BLDV1FL="N";
if not missing(covis60750) then
BLDV2FL="Y"; else BLDV2FL="N";
if not missing(covis60751) and cohortn^=1.16 then
BLDV3FL="Y"; else if not missing(covis1165454) and cohortn=1.16 then BLDV3FL="Y"; else if not missing(covis75849038) then BLDV3FL="Y"; else BLDV3FL="N";
if not missing(covis60752) and cohortn^=1.16 then
BLDV4FL="Y"; else if not missing(covis1165455) and cohortn=1.16 then BLDV4FL="Y"; else if not missing(covis75849039) then BLDV4FL="Y"; else BLDV4FL="N";
if not missing(covis60753) and cohortn^=1.16 then
BLDV5FL="Y"; else if not missing(covis1165456) and cohortn=1.16 then BLDV5FL="Y"; else BLDV5FL="N";
if not missing(covis60767) then
BLDV6FL="Y"; else BLDV6FL="N";
FDA-CBER-2022-5812-0072943
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] if not missing(covis60768) then
BLDV7FL="Y";
else BLDV7FL="N";
if not missing(codt60765) then
BLDV1DT=codt60765;
if not missing(codt60750) then
BLDV2DT=codt60750;
if not missing(codt60751) and cohortn=1.16 then
BLDV3ADT=codt60751; else if not missing(codt60751) then BLDV3DT=codt60751; else if not missing(codt75849038) then BLDV3DT=codt75849038;
if not missing(codt1165454) and cohortn=1.16 then
BLDV3DT=codt1165454;
if not missing(codt60752) and cohortn=1.16 then
BLDV4ADT=codt60752; else if not missing(codt60752) then BLDV4DT=codt60752; else if not missing(codt75849039) then BLDV4DT=codt75849039;
if not missing(codt1165455) and cohortn=1.16 then
BLDV4DT=codt1165455;
if not missing(codt60753) and cohortn=1.16 then
BLDV5ADT=codt60753; else if not missing(codt60753) then BLDV5DT=codt60753;
if not missing(codt1165456) and cohortn=1.16 then
BLDV5DT=codt1165456;
if not missing(codt60754) and cohortn=1.16 then
BLDV6ADT=codt60754; else if not missing(codt60754) then BLDV6DT=codt60754; else if not missing(codt75849040) then BLDV6DT=codt75849040;
if not missing(codt60767) then
BLDV6DT=codt60767;
if not missing(codt60768) then
BLDV7DT=codt60768;
if phasen ne 1 then
do;
FDA-CBER-2022-5812-0072944
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] if not missing(BLDV6DT) then
v3date=BLDV6DT; else if not missing(v3p2) then v3date=input(v3p2, e8601da.); else v3date=vax102dt + 42; end; else do;
if not missing(BLDV4DT) then
v3date=BLDV4DT; else if not missing(v5p1) then v3date=input(v5p1, e8601da.); else v3date=vax102dt + 8; end; format v3date is8601da.;
if not missing(safety) or index(RSEXSAF, 'Safety') then
SAFFL="N";
if RFICDT>. and RANDFL="Y" and ARM ne "SCREEN FAILURE" and INEX="" then
INCL1FL="Y"; else INCL1FL="N";
if (vax101dt>. or vax102dt>.) and randfl="Y" and ARM ne ""
and (((index(upcase(vax101), "BNT162B1") and index(upcase(arm), "BNT162B1")) or (index(upcase(vax101), "BNT162B2") and index(upcase(arm), "BNT162B2")) or (index(upcase(vax101), "PLACEBO") and index(upcase(arm), "PLACEBO"))) or (vax101dt=. and vax102dt>. and ((index(upcase(vax102), "BNT162B1") and index(upcase(arm), "BNT162B1")) or (index(upcase(vax102), "BNT162B2") and index(upcase(arm), "BNT162B2")) or (index(upcase(vax102), "PLACEBO") and index(upcase(arm), "PLACEBO"))))) then INCL2FL="Y"; else INCL2FL="N";
if incl3p and VAX101DT>. and phasen=1 then
INCL3FL="Y"; else if phasen=1 then INCL3FL="N";
if not missing(BLDV6DT) then
visit3dt=BLDV6DT;
if not missing(safety) then
INCL6FL="N"; else if (not missing(efficacy) and not(. < visit3dt < pop2pddt) and ((missing(vax102dt) or (. <pop2pddt <=vax102dt)) or (not missing(vax102dt) and pop2pddt-vax102dt<14) or (not missing(vax102dt) and pop2pddt-vax102dt>=14 and (pop2pddt<=visit3dt)) )) then
FDA-CBER-2022-5812-0072945
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] INCL6FL="N";
else if not missing(immuno) then
do;
if index(trt02p, 'Dose')=0 then
do;
if missing(period1_pop3) then
INCL6FL="Y"; else do;
if . < v3date < POP3PDDT then
INCL6FL="Y"; else INCL6FL="N"; end; end; end; else INCL6FL="Y";
if 19 <=VAX102DT-VAX101DT <=42 and vax101=vax102 and ARM ne ""
and ((index(upcase(vax102), "BNT162B1") and index(upcase(arm), "BNT162B1")) or (index(upcase(vax102), "BNT162B2") and index(upcase(arm), "BNT162B2")) or (index(upcase(vax102), "PLACEBO") and index(upcase(arm), "PLACEBO"))) then INCL7FL="Y"; else INCL7FL="N";
if incl8p and VAX102DT>. then
INCL8FL="Y"; else INCL8FL="N"; *1mpd2 after dose 3 will be exclude;
if UNBLNDDT>. and vax102dt>. and UNBLNDDT>visit3dt>. then
INCL10FL="Y"; else if vax102dt>. and (.<UNBLNDDT<=visit3dt or .<UNBLNDDT<vax102dt+14) then INCL10FL="N";
if INCL3FL="N" and (VAX101DT>. or vax102dt>.) then
do; EXCL3FL="Y"; EXCRIT3="did not have at least 1 valid and determinate immunogenicity result after Dose 1 but before Dose 2"; end;
if INCL8FL="N" and vax102dt>. then
do; EXCL8FL="Y"; EXCRIT8="did not have at least 1 valid and determinate immunogenicity result after Dose 2"; end;
if INCL10FL="N" then
FDA-CBER-2022-5812-0072946
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] do;
EXCL10FL="Y";
if .<UNBLNDDT<vax102dt+7 then
EXCRIT10="unblinded prior to 7 days post Dose 2"; else if vax102dt+7<=UNBLNDDT<vax102dt+14 then EXCRIT10="unblinded on or after 7 days but prior to 14 days post Dose 2"; else if vax102dt+14<=UNBLNDDT<=visit3dt then EXCRIT10="unblinded on or after 14 days but no later than 1 month post Dose 2 visit"; end;
if INCL1FL="N" then
do; EXCL1FL="Y"; EXCRIT1="not eligible for the study at randomization"; end; else do;
if INCL2FL="N" then
do; EXCL2FL="Y"; EXCRIT2="did not receive Dose 1 as randomized"; end; else do;
if INCL7FL="N" then
do; EXCL7FL="Y"; EXCRIT7="did not receive all vaccination(s) as randomized or did not receive Dose 2 within the predefined window (19-42 days after Dose 1)"; end; end; end;
if INCL6FL="N" then
do; length _ttt_ $200;
if not missing(safety) then
_ttt_="Safety";
if not missing(efficacy) then
do;
if not missing(vax102dt) then
do;
if .<pop2pddt-vax102dt<7 then
do;
if not missing(_ttt_) then
_ttt_=strip(_ttt_)||", Efficacy (within 7 days post Dose 2)";
FDA-CBER-2022-5812-0072947
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] else
_ttt_="Efficacy (within 7 days post Dose 2)";
end; else if 7<=pop2pddt-vax102dt<14 then do;
if not missing(_ttt_) then
_ttt_=strip(_ttt_)||", Efficacy (between 7-14 days post Dose 2)"; else _ttt_="Efficacy (between 7-14 days post Dose 2)"; end; else if pop2pddt-vax102dt>=14 and (.<pop2pddt<=visit3dt) then do;
if not missing(_ttt_) then
_ttt_=strip(_ttt_)||", Efficacy (between 14 days - 1 month post Dose 2)"; else _ttt_="Efficacy (between 14 days - 1 month post Dose 2)"; end; end; end;
if not missing(immuno) then
do;
if . < POP3PDDT <=BLDV3DT then
do;
if not missing(_ttt_) then
_ttt_=strip(_ttt_)||", Immunogenicity (on or before 3 weeks post Dose 1)"; else _ttt_="Immunogenicity (on or before 3 weeks post Dose 1)"; end; else if missing(BLDV3DT) and . < POP3PDDT <=w3pv1dt then do;
if not missing(_ttt_) then
_ttt_=strip(_ttt_)||", Immunogenicity (on or before 3 weeks post Dose 1)"; else _ttt_="Immunogenicity (on or before 3 weeks post Dose 1)"; end; else if missing(BLDV3DT) and missing(w3pv1dt) and not missing(vax101dt) and . < POP3PDDT <=(vax101dt + 23) then do;
if not missing(_ttt_) then
_ttt_=strip(_ttt_)||", Immunogenicity (on or before 3 weeks post Dose 1)"; else _ttt_="Immunogenicity (on or before 3 weeks post Dose 1)"; end; else if missing(vax101dt) then do;
if not missing(_ttt_) then
FDA-CBER-2022-5812-0072948
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] _ttt_=strip(_ttt_)||", Immunogenicity (on or before 3 weeks post Dose 1)";
else
_ttt_="Immunogenicity (on or before 3 weeks post Dose 1)"; end; else if . < POP3PDDT <=v3date then do;
if phasen ne 1 then
do;
if not missing(_ttt_) then
_ttt_=strip(_ttt_)||", Immunogenicity (on or before 1 month post Dose 2)"; else _ttt_="Immunogenicity (on or before 1 month post Dose 2)"; end; else do;
if not missing(_ttt_) then
_ttt_=strip(_ttt_)||", Immunogenicity (on or before 1 week post Dose 2)"; else _ttt_="Immunogenicity (on or before 1 week post Dose 2)"; end; end; else if missing(v3date) and not missing(period1_pop3) then do;
if phasen ne 1 then
do;
if not missing(_ttt_) then
_ttt_=strip(_ttt_)||", Immunogenicity (on or before 1 month post Dose 2)"; else _ttt_="Immunogenicity (on or before 1 month post Dose 2)"; end; else do;
if not missing(_ttt_) then
_ttt_=strip(_ttt_)||", Immunogenicity (on or before 1 week post Dose 2)"; else _ttt_="Immunogenicity (on or before 1 week post Dose 2)"; end; end; end; EXCL6FL="Y";
if not missing(_ttt_) then
EXCRIT6="had important protocol deviation(s) as determined by the clinician for "||strip(_ttt_)||" Population(s)"; else EXCRIT6=""; end;
FDA-CBER-2022-5812-0072949
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] if phasen=1 and randfl="Y" and saffl="Y" and (VAX101DT>. or vax102dt>.) and
INCL3fl="Y" and index(RSEXSAF, 'Immunogenicity')=0 then
AAI01FL="Y"; else if phasen=1 then AAI01FL="N";
if randfl="Y" and saffl="Y" and vax102dt>. and INCL8fl="Y" and index(RSEXSAF,
'Immunogenicity')=0 then AAI02FL="Y"; else AAI02FL="N";
if RFICDT>. and RANDFL="Y" and ARM ne "SCREEN FAILURE" and INCL2fl="Y"
and (INCL7fl="Y" and (vax10udt=. or (vax10udt>vax102dt>. and vax10udt>=vax102dt+7))) and VAX102DT>. and (UNBLNDDT=. or (UNBLNDDT>=vax102dt+7>.)) and saffl="Y" and INCL1FL="Y" and not (not missing(efficacy) and pop2pddt-vax102dt<7) and index(RSEXSAF, 'Efficacy')=0 then EVALEFFL="Y"; else EVALEFFL="N";
if RFICDT>. and RANDFL="Y" and ARM ne "SCREEN FAILURE" and INCL2fl="Y"
and (INCL7fl="Y" and (vax10udt=. or (vax10udt>vax102dt>. and vax10udt>=vax102dt+14))) and VAX102DT>. and (UNBLNDDT=. or (UNBLNDDT>=vax102dt+14>.)) and saffl="Y" and INCL1FL="Y" and not (not missing(efficacy) and pop2pddt-vax102dt<14) and index(RSEXSAF, 'Efficacy')=0 then EV14EFFL="Y"; else EV14EFFL="N";
if RFICDT>. and RANDFL="Y" and ARM ne "SCREEN FAILURE" and INCL2fl="Y"
and (INCL7fl="Y" and (vax10udt=. or (vax10udt>visit3dt>.))) and VAX102DT>. and (UNBLNDDT=. or (UNBLNDDT>visit3dt>.)) and saffl="Y" and INCL1FL="Y" and V3C19NIG ne "" and INCL10FL^="N" and not (not missing(efficacy) and pop2pddt<=visit3dt) and index(RSEXSAF, 'Efficacy')=0 then EV1MEFFL="Y"; else EV1MEFFL="N";
if randfl="Y" and saffl="Y" and (vax101dt>. or vax102dt>.) and index(RSEXSAF,
'Efficacy')=0 then AAI1EFFL="Y"; else AAI1EFFL="N";
if randfl="Y" and saffl="Y" and vax101dt>. and
vax102dt>. and (UNBLNDDT=. or (UNBLNDDT>=vax102dt+7>.)) and index(RSEXSAF, 'Efficacy')=0 then AAI2EFFL="Y"; else
AAI2EFFL="N";
FDA-CBER-2022-5812-0072950
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] if randfl="Y" and saffl="Y" and vax101dt>. and vax102dt>. and index(RSEXSAF,
'Efficacy')=0 then AAI2ASFL="Y"; else AAI2ASFL="N";run;
*update criteria flag 9;data incl9p_p2;
set isva;
if istestcd^="C19NIG" and isorres not in ("" "IND" "QNS" "NOT DONE"); if (28 <=isdate - vax102dt <=42 and phasen in (2 3 4))
or (6 <=isdate - vax102dt <=8 and phasen=1);
proc sort nodupkey;
by usubjid;run;
proc sort data=adsl;
by usubjid;run;
data adsl(drop=INCL9FL_p2 EXCL9FL_p2 EXCRIT9_p2 EVAL02FL_p2);
length EXCRIT9_p2 $200.; merge adsl(in=a) incl9p_p2(keep=usubjid in=incl9p2); by usubjid;
if a; if incl9p2 and vax102dt >. then
INCL9FL_p2='Y'; else INCL9FL_p2='N';
if INCL9FL_p2="N" and vax102dt>. and incl1fl='Y' and incl2fl='Y' then
do; **hup02 updated to be consistent with BLA; EXCL9FL_p2="Y";
if phasen in (2 3 4) then
EXCRIT9_p2="did not have at least 1 valid and determinate immunogenicity result within 28-42 days after Dose 2"; else if phasen=1 then EXCRIT9_p2="did not have at least 1 valid and determinate immunogenicity result within 6-8 days after Dose 2"; end;
if INCL1fl="Y" and INCL2fl="Y" and (INCL7fl="Y" and vax10udt=.) and saffl="Y"
and INCL9FL_p2="Y" and not((. < POP3PDDT <=v3date) or (v3date=. and not
missing(period1_pop3)) ) and index(RSEXSAF, 'Immunogenicity')=0 then
FDA-CBER-2022-5812-0072951
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] EVAL02FL_p2="Y";
else
EVAL02FL_p2="N"; INCL9FL=INCL9FL_p2; EXCL9FL=EXCL9FL_p2; EXCRIT9=EXCRIT9_p2; EVAL02FL=EVAL02FL_p2; label EVAL02FL="Dose 2 evaluable Immun Popu Flag";run;
*Update criteria flag 4;data incl4p_re;
set isva;
if istestcd^="C19NIG" and isorres not in ("" "IND" "QNS" "NOT DONE"); if 19 <=isdate - vax101dt <=23;
run;
proc sort data=incl4p_re nodupkey;
by usubjid;run;
proc sort data=adsl;
by usubjid;run;
data adsl;
merge adsl(in=a) incl4p_re(keep=usubjid in=incl4); by usubjid;
if a;
INCL4FL=''; EXCL4FL=''; EXCRIT4=''; EVAL01FL='';
if phasen=1 then
do;
if incl4 and vax101dt >. then
INCL4FL='Y'; else INCL4FL='N';
if INCL4FL='N' and vax101dt>. and INCL1FL='Y' and INCL2FL='Y' then
do; EXCL4FL="Y"; EXCRIT4="did not have at least 1 valid and determinate immunogenicity result within 19-23 days after Dose 1"; end;
if phasen=1 and INCL1fl="Y" and INCL2fl="Y" and INCL4fl="Y" and saffl='Y'
FDA-CBER-2022-5812-0072952
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] and incl6fl='Y' and index(RSEXSAF, 'Immunogenicity')=0 and
not((.<pop3pddt <=bldv3dt) or (missing(bldv3dt) and .<pop3pddt <=w3pv1dt)
or (missing(bldv3dt) and missing(w3pv1dt) and .<pop3pddt <=(vax101dt + 23)) ) then EVAL01FL="Y"; else if phasen=1 then EVAL01FL="N"; end; attrib INCL4FL label="Have valid immuno within timeframe 1" EVAL01FL label="Dose 1 evaluable Immun Popu Flag";
proc sort;
by usubjid;run;
*Update criteria flag 17;
*not consider any post N-binding results which are after V301 ;
proc sql;
create table isva_tmp as select a.*, b.v301dt from isva a left join (select usubjid, input(svstdtc, yymmdd10.) as v301dt from dataprot.sv where visit='V301_VAX3') b on a.usubjid=b.usubjid;quit;
data incl17p(keep=usubjid);
set isva_tmp;
if istestcd="C19NIG" and isorres not in ("" "IND" "QNS" "NOT DONE"); if not missing(vax102dt) and isdate > vax102dt; if . < v301dt < isdate then
delete;
proc sort nodupkey;
by usubjid;run;
data nbind1st_0;
set isva_tmp;
if istestcd="C19NIG" and isorres not in ("" "IND" "QNS" "NOT DONE"); if not missing(vax102dt) and isdate > vax102dt; if . < v301dt < isdate then
delete;
proc sort;
by usubjid isdate;run;
data nbind1st(keep=usubjid isdate);
set nbind1st_0;
FDA-CBER-2022-5812-0072953
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] by usubjid isdate;
if first.usubjid then
output;run;
data asy_usub(keep=usubjid SURVICDT);
set dataprot.sv;
if visit='V201_SURVEIL_CONSENT'; if not missing(svstdtc);
SURVICDT=input(svstdtc, e8601da.); format SURVICDT date9.;
proc sort nodupkey;
by usubjid;run;
data adsl(drop=nbind1stdt);
attrib EVASEFFL label="Evaluable Efficacy Pop Flag - Asympt" EVSCEFFL label="Evaluable Efficacy Pop Flag - Seroconv" EXCL17FL label="Exclusion Flag 17" INCL18FL label="No PD prior to 1st N-Binding test PD2" EXCL18FL label="Exclusion Flag 18" EXCRIT18 label="Exclusion Criterion 18" format=$200. INCL9FL label="Have valid immuno within timeframe 2" INCL17FL label="Have N-Binding result PD2" EXCL4FL label="Exclusion Flag 4" EXCL9FL label="Exclusion Flag 9" SURVICDT label="Asymptomatic Surveillance Consented Date"; merge adsl(in=a) incl17p(in=in17) asy_usub(in=asy) nbind1st(rename=(isdate=nbind1stdt)); by usubjid;
if a; if in17 then
INCL17FL='Y'; else INCL17FL='N';
if incl17fl ne 'Y' and incl1fl='Y' then
do; **hup02 updated to have crit17 exclusive with crit1; EXCL17FL='Y'; EXCRIT17='did not have N-binding test result at a post(*ESC*){unicode 2013}Dose 2 visit'; end;
if not(. < pop2pddt < nbind1stdt) then
incl18fl='Y'; else incl18fl='N';
if incl18fl ne 'Y' and nbind1stdt ne . then
do;
FDA-CBER-2022-5812-0072954
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] excl18fl='Y';
excrit18='had important protocol deviation(s) as determined by the clinician for Efficacy (prior to the first
post(*ESC*){unicode 2013}Dose 2 N-binding antibody test) Population'; end;
if saffl='Y' and index(RSEXSAF, 'Efficacy')=0 and INCL1FL='Y' and INCL7fl="Y"
and not(. < vax10udt <=SURVICDT) and not missing(SURVICDT) and not(. < pop2pddt <=SURVICDT) then EVASEFFL='Y'; else EVASEFFL='N';
if saffl='Y' and index(RSEXSAF, 'Efficacy')=0 and INCL1FL='Y' and INCL7fl="Y"
and not (. < vax10udt <=nbind1stdt) and INCL17FL='Y' and incl18fl='Y' then EVSCEFFL='Y'; else EVSCEFFL='N';run;
******************************************************************************************;
* Specification 8 *;* OTHER POP SELECTION FLAGS *;* 1 - Determine population flags. *;* 2 - Read in flags - PROCGR1/PROCGR1N. *;* 3 - Read in flags - PEDIMMFL. *;* 4 - PC1MD2FL. *;* 5 - HIV flag. *;* 6 - Determine subjects with booster dose. *;******************************************************************************************;
data adsl;
merge adsl(in=a) sv(in=b keep=usubjid visit where=(index(visit, "V104_")=0 and index(visit, "_MONTH6_"))); label SCREEN="Screening" DS3KFL="FU to 6MPD2" DS30KFL="Phase 3 30k Subjects Flag" OPBOUFL="Subjects Received Placebo & unblinded" JPNFL="Japanese Subject Flag" PEDREAFL="Phase 2/3 Pop for 12-25 Reacto Subset" STEXCFL="Site/Subject Exclusion Flag for SQE" UNKRDFL="Unknown Randomization Group Flag"; by usubjid;
if a; if (tr02sdt>. or UNBLNDDT>.) and actarm in ("Placebo") then
OPBOUFL="Y"; else OPBOUFL="N";
if phasen ne 1 and vax101="BNT162b2 (30 (*ESC*){unicode 03BC}g)" and
vax102="BNT162b2 (30 (*ESC*){unicode 03BC}g)" and trt01p='BNT162b2 Phase 2/3 (30 mcg)' then DS3KFL="Y"; else
DS3KFL="N";
FDA-CBER-2022-5812-0072955
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] if not missing(RFICDT) then
SCREEN='Y'; else SCREEN="N";
if '27JUL2020'd<=rficdt and .<randdt<='09OCT2020'd and phasen ne 1 then
DS30KFL="Y"; else DS30KFL="N";
if RACIALD="JAPANESE" then
JPNFL="Y"; else JPNFL="N";
if reactofl="Y" and phasen ne 1 and agegr4n in (1 2) then
PEDREAFL="Y"; STEXCFL="";
if arm="" and randdt>. then
UNKRDFL="Y";run;
*Add PEDIMMFL for pediatric info;proc import datafile="&expath./c4591001-subject-list-for-12-25-immuno-analysis-27jan2021.xlsx"
out=pop12_25 dbms=xlsx replace; getnames=yes;run;
proc sort data=pop12_25;
by usubjid;run;
data adsl;
merge adsl(in=a) pop12_25(in=b); by usubjid subjid;
if b then
PEDIMMFL='Y';
if a;
label PEDIMMFL="Pop for Non-inferiority Assessement";run;
*HIV subject;proc import datafile="&expath./201114-hiv-preferred-terms.xlsx" out=hivpt
dbms=xlsx replace; getnames=yes;run;
proc sort;
FDA-CBER-2022-5812-0072956
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] by term;
run;
proc sort data=dataprot.mh out=mh_hiv (keep=usubjid mhdecod
rename=mhdecod=term); by mhdecod;run;
data hiv1;
merge mh_hiv (in=a) hivpt (in=b); by term;
if a and b;
run;
proc sort;
by usubjid;run;
data adsl;
merge adsl (in=a) hiv1 (in=b keep=usubjid); by usubjid;
if a;
***** Flag for HIV +ve Subjects *****;
if a and b then
HIVFL="Y"; else HIVFL="N"; label HIVFL="HIV Positive Subjects Flag"; ***** Set all Efficacy Flags to N for Phase 1 subjects *****;run;
/**** START - Setting up ADSYMPT dataset *****/;
** Get FA data. **;
proc sort data=dataprot.face(keep=studyid domain usubjid faseq fatestcd fatest
faobj facat fascat faorres fastresc fadrvfl visitnum visit fadtc) out=face; by usubjid visitnum visit fatestcd faobj faorres; where upcase(strip(facat))='EFFICACY';run;
data face1 face_stdt(keep=usubjid faorres visitnum visit
rename=(faorres=fastdtc)) face_endt(keep=usubjid faorres visitnum visit rename=(faorres=faendtc)) face_ong(keep=usubjid faorres visitnum visit rename=(faorres=faong)); set face; by usubjid visitnum visit fatestcd faobj faorres;
if upcase(strip(fatestcd))='FSYMDATE' then
output face_stdt; else if upcase(strip(fatestcd))='LSYMDATE' then
output face_endt;
FDA-CBER-2022-5812-0072957
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] else if upcase(strip(fatestcd))='SYMONGO' then
output face_ong;
else output face1;run;
data face2;
merge face1(in=a) face_stdt(in=b) face_endt(in=c) face_ong(in=d); by usubjid visitnum visit;
if a;
run;
data fa(keep=studyid domain usubjid paramn paramcd param parcat1 parcat2 aval
avalc adt astdt aendt visitnum visit) fa_excluded; set face2; length paramn 8 paramcd $8 param parcat1 parcat2 avalc $200; param=upcase(strip(faobj)); parcat1='SIGNS AND SYMPTOMS OF DISEASE'; parcat2='RESPIRATORY ILLNESS'; avalc=strip(fastresc);
if strip(param) in ('CHILLS', 'DIARRHEA', 'FEVER') then
do; paramcd=strip(param);
if paramcd='CHILLS' then
paramn=1;
if paramcd='DIARRHEA' then
paramn=2;
if paramcd='FEVER' then
paramn=3; end; else if strip(param)='NEW LOSS OF TASTE OR SMELL' then do; paramn=4; paramcd='NLTSTSML'; end; else if strip(param)='NEW OR INCREASED COUGH' then do; paramn=5; paramcd='NCOUG'; end; else if strip(param)='NEW OR INCREASED MUSCLE PAIN' then do; paramn=6; paramcd='NMUSPN'; end; else if strip(param)='NEW OR INCREASED SHORTNESS OF BREATH' then do; paramn=7;
paramcd='NSTBRTH';
FDA-CBER-2022-5812-0072958
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] end;
else if strip(param)='NEW OR INCREASED SORE THROAT' then
do; paramn=8; paramcd='NSRTHROT'; end; else if strip(param)='VOMITING' then do; paramn=9; paramcd='VOMIT'; end; else if strip(param)='LOSS OF TASTE/SMELL' then do; paramn=10; paramcd='LSTSTSML'; end; else if strip(param) in ('NEW OR INCREASED NASAL CONGESTION', 'NASAL CONGESTION') then do; paramn=11; paramcd='NNSLCONG'; param='NEW OR INCREASED NASAL CONGESTION'; end; else if strip(param)='NEW OR INCREASED NASAL DISCHARGE' then do; paramn=12; paramcd='NNSLDSCH'; end; else if strip(param)='NEW OR INCREASED SPUTUM PRODUCTION' then do; paramn=13; paramcd='SPUTPROD'; end; else if strip(param) in ('NEW OR INCREASED WHEEZING', 'WHEEZING') then do; paramn=14; paramcd='WHEEZ'; param='NEW OR INCREASED WHEEZING'; end; else if strip(param)='FATIGUE' then do; paramn=15; paramcd='FATIGUE'; param='FATIGUE'; end; else if strip(param)='HEADACHE' then do; paramn=16; paramcd='HEADACHE'; param='HEADACHE'; end; else if strip(param)='NAUSEA' then do;
paramn=18;
FDA-CBER-2022-5812-0072959
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] paramcd='NAUSEA';
param='NAUSEA';
end; else do; id=prxparse('/' || 'RUNNY NOSE' || '/i'); call prxsubstr(id, param, point, lng);
if lng > 0 or upcase(faobj)='RHINORRHOEA' then
do; paramn=17; paramcd='RIHNRA'; param='RHINORRHOEA'; end; end; aval=.; adt=input(fadtc, ?? yymmdd10.); astdt=input(fastdtc, ?? yymmdd10.); aendt=input(faendtc, ?? yymmdd10.); format adt astdt aendt date9.;
if not (strip(reverse(substr(reverse(strip(visit)), 1, 3))) in ('1_S', '2_S',
'S_R', '4_S', '6_S', '_NS', '4_L', '6_L', 'SCR') or strip(visit) in ('V3_MONTH1_POSTVAX2_L', 'V5_MONTH12_L')) then do;
if paramcd ^='' then
output fa; else output fa_excluded; end;run;
proc sql;
create table fa_prnt as select distinct faobj from fa_excluded where faobj ^='';quit;
** Get IS data. **;data is(keep=studyid domain usubjid paramn paramcd param parcat1 parcat2 aval
avalc adt astdt aendt visitnum visit isspec ismethod); set dataprot.is; where strip(istestcd) in ('C19NIG'); length paramn 8 paramcd $8 param parcat1 parcat2 avalc $200; parcat1=strip(iscat); parcat2=''; paramn=90; paramcd=strip(istestcd); param=upcase(strip(istest)); aval=.; avalc=upcase(strip(isorres)); adt=input(isdtc, ?? yymmdd10.);
astdt=.;
FDA-CBER-2022-5812-0072960
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] aendt=.;
format adt astdt aendt date9.;
*if strip(visit) in ('V1_DAY1_VAX1_L') then output;run;
** Get MB data. **;data mb(keep=studyid domain usubjid paramn paramcd param parcat1 parcat2 aval
avalc adt astdt aendt visitnum visit_ mbloc mbspec mbmethod rename=(visit_=visit)); set dataprot.mb; where (upcase(strip(mbtest))='SEVERE ACUTE RESP SYNDROME CORONAVIRUS 2' and upcase(strip(mbmethod))="IMMUNOCHROMATOGRAPHY") or (upcase(strip(mbtest)) in ('CEPHEID RT-PCR ASSAY FOR SARS-COV-2', 'CEPHEID RT-PCR ASSAY OF SARS-COV-2') and upcase(strip(mbmethod))='REVERSE TRANSCRIPTASE PCR'); length paramn 8 paramcd $8 param parcat1 parcat2 avalc $200 visit_ $64;
if upcase(strip(mbtest))='SEVERE ACUTE RESP SYNDROME CORONAVIRUS 2' and
strip(spdevid) not in ('34', '44', '68') then do; mborres='UNKNOWN'; mbstresc='UNK'; end; parcat1=strip(mbcat); parcat2='';
if strip(mbtestcd)='SARSCOV2' then
paramn=40;
if strip(mbtestcd)='RTCOV2NS' then
paramn=41; paramcd=strip(mbtestcd); param=upcase(strip(mbtest)); aval=.; avalc=strip(mborres); visit_=strip(visit); adt=input(mbdtc, ?? yymmdd10.); astdt=.; aendt=.; format adt astdt aendt date9.;
if not (strip(reverse(substr(reverse(strip(visit)), 1, 3))) in ('1_S', '2_S',
'S_R', '4_S', '6_S', '_NS', '4_L', '6_L', 'SCR') or strip(visit) in ('V3_MONTH1_POSTVAX2_L', 'V5_MONTH12_L')) then output;run;
proc sort data=mb out=mb1 nodup;
by usubjid paramn adt visitnum avalc;run;
data adsympt1;
set fa is mb1;
FDA-CBER-2022-5812-0072961
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] avisitn=visitnum;
avisit=strip(visit);
run;
proc sort data=adsympt1 out=adsympt2 nodup;
by domain usubjid visitnum visit adt astdt aendt isspec ismethod mbloc mbmethod mbspec;run;
%let __excl_vis1a =
%str('SCR','V1_DAY1_VAX1_S','V2_DAY2_POSTVAX1_S','V3_WEEK1_POSTVAX1_S','V4_WEEK3_VAX2_S','V5_WEEK1_POSTVAX2_S','V6_WEEK2_POSTVAX2_S','V7_MONTH1_S');%let __excl_vis1b = %str('V4_WEEK3_VAX2_S_R','V5_WEEK1_POSTVAX2_S_R','V6_WEEK2_POSTVAX2_S_R','V7_MONTH1_S_R','V8_MONTH6_S','V9_MONTH12_S','V10_MONTH24_S');%let __excl_vis2 = %str('V1_DAY1_VAX1_NS','V2_VAX2_NS','V3_WEEK2_POSTVAX2_NS','V4_MONTH1_NS','V5_MONTH6_NS','V6_MONTH12_NS','V7_MONTH24_NS');%let __excl_vis3 = %str('V1_DAY1_VAX1_L','V2_VAX2_L','V3_MONTH1_POSTVAX2_L','V4_MONTH6_L','V5_MONTH12_L','V6_MONTH24_L','POT_COVID_ILL','POT_COVID_CONVA');** Get CE data. **;
data __ce(keep=usubjid domain adt astdt aendt visitnum visit);
set dataprot.ce; where upcase(strip(cecat))='SEVERE COVID-19 ILLNESS' and upcase(strip(cescat)) in ('SIGNIFICANT ACUTE RENAL DYSFUNCTION', 'SIGNIFICANT ACUTE HEPATIC DYSFUNCTION', 'SIGNIFICANT ACUTE NEUROLOGIC DYSFUNCTION'); adt=input(cedtc, ?? yymmdd10.); astdt=input(cestdtc, ?? yymmdd10.); aendt=input(ceendtc, ?? yymmdd10.); format adt astdt aendt yymmdd10.;run;
** Get FA data. **;proc sort data=dataprot.face(keep=studyid usubjid domain faseq fatestcd fatest
faobj facat fascat faorres fastresc fadrvfl visitnum visit fadtc) out=__face; by usubjid visitnum visit fatestcd faobj faorres; where upcase(strip(facat))='EFFICACY';run;
data __face1 __face_stdt(keep=usubjid faorres visitnum visit
rename=(faorres=fastdtc)) __face_endt(keep=usubjid faorres visitnum visit rename=(faorres=faendtc)) __face_ong(keep=usubjid faorres visitnum visit rename=(faorres=faong)); set __face; by usubjid visitnum visit fatestcd faobj faorres;
if upcase(strip(fatestcd))='FSYMDATE' then
output __face_stdt; else if upcase(strip(fatestcd))='LSYMDATE' then
output __face_endt;
FDA-CBER-2022-5812-0072962
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] else if upcase(strip(fatestcd))='SYMONGO' then
output __face_ong;
else output __face1;run;
data __fa(keep=usubjid domain adt astdt aendt visitnum visit);
merge __face1(in=a) __face_stdt(in=b) __face_endt(in=c) __face_ong(in=d); by usubjid visitnum visit;
if a;
adt=input(fadtc, ?? yymmdd10.); astdt=input(fastdtc, ?? yymmdd10.); aendt=input(faendtc, ?? yymmdd10.); format adt astdt aendt yymmdd10.;run;
** Get data from HO. **;proc sql;
create table __ho1 as select * from dataprot.ho left join (select qnam, qlabel, qval from dataprot.suppho as b where upcase(strip(qnam))='HCUHSP') on strip(usubjid)=strip(b.usubjid) and strip(put(hoseq, best.))=strip(b.idvarval); create table __ho2 as select * from __ho1 left join (select hostdtc as hostdtc_, hoendtc as hoendtc_, hoenrtpt as hoenrtpt_, hoentpt as hoentpt_ from __ho1 as b where upcase(strip(hocat))='HOSPITALIZATION STATUS' and upcase(strip(hoterm))='HOSPITAL') on usubjid=b.usubjid and visitnum=b.visitnum and visit=b.visit and qnam ^='' order by usubjid, hoseq, hostdtc;quit;
data __ho(keep=usubjid domain adt astdt aendt visitnum visit);
set __ho2; adt=input(hodtc, ?? yymmdd10.);
if upcase(strip(hoterm))='ICU' then
do; astdt=input(hostdtc, ?? yymmdd10.); aendt=input(hoendtc, ?? yymmdd10.); output; end;
if upcase(strip(qnam))='HCUHSP' then
do; astdt=input(hostdtc_, ?? yymmdd10.); aendt=input(hoendtc_, ?? yymmdd10.); output; end; format adt astdt aendt yymmdd10.;run;
** Get IS data. **;
FDA-CBER-2022-5812-0072963
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]data __is(keep=usubjid domain adt astdt aendt visitnum visit);
set dataprot.is;
where strip(istestcd) in ('C19NIG'); adt=input(isdtc, ?? yymmdd10.); astdt=.; aendt=.; format adt astdt aendt yymmdd10.;run;
** Get LB data. **;data __lb(keep=usubjid domain adt astdt aendt visitnum visit_
rename=(visit_=visit)); set dataprot.lb; where upcase(strip(lbcat))='OXYGENATION PARAMETERS'; length visit_ $64; visit_=strip(visit); adt=input(lbdtc, ?? yymmdd10.); astdt=.; aendt=.; format adt astdt aendt yymmdd10.;run;
** Get MB data. **;data __mb(keep=usubjid domain adt astdt aendt visitnum visit_
rename=(visit_=visit)); set dataprot.mb; where (upcase(strip(mbtest))='SEVERE ACUTE RESP SYNDROME CORONAVIRUS 2' and upcase(strip(mbmethod))="IMMUNOCHROMATOGRAPHY") or (upcase(strip(mbtest)) in ('CEPHEID RT-PCR ASSAY FOR SARS-COV-2', 'CEPHEID RT-PCR ASSAY OF SARS-COV-2') and upcase(strip(mbmethod))='REVERSE TRANSCRIPTASE PCR'); length visit_ $64; visit_=strip(visit); adt=input(mbdtc, ?? yymmdd10.); astdt=.; aendt=.; format adt astdt aendt yymmdd10.;run;
** Get VS data. **;data __vs(keep=usubjid domain adt astdt aendt visitnum visit);
set dataprot.vs; where upcase(strip(vscat))='GENERAL VITAL SIGNS' and strip(vstestcd) in ('RESP', 'HR', 'OXYSAT', 'DIABP', 'SYSBP'); adt=input(vsdtc, ?? yymmdd10.); astdt=.; aendt=.; format adt astdt aendt yymmdd10.;run;
data __visits_sdtm;
FDA-CBER-2022-5812-0072964
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] set __ce __fa __ho __is __lb __mb __vs;
run;
proc sort data=__visits_sdtm nodup;
by usubjid visitnum visit adt astdt aendt domain;run;
data __visits_sdtm_rv1(drop=visit_) __visits_sdtm_rv1a(drop=visit_ visitnum
covid_vis_cnt) __covid_vis_cnt(keep=usubjid covid_vis_cnt); set __visits_sdtm; by usubjid visitnum visit adt astdt aendt domain; visitnum_bak=visitnum; visit_bak=strip(visit);
if length(visit) >=8 then
do;
if domain='MB' and substr(strip(visit), 8, 1) in ('1', '2', '3', '4', '5',
'6', 'R') and substr(strip(visit), 1, 6)='COVID_' then rvflg=1;
if rvflg=1 then
visit=substr(visit, 1, 7); end; ** Create Covid visits count to be used for repeat visits. **; length visit_ $200;
if first.usubjid then
do; covid_vis_cnt=0; visit_=''; end;
if length(visit_bak) >=6 and upcase(substr(strip(visit_bak), 1, 6))='COVID_'
and strip(visit_) ^=strip(visit_bak) and rvflg ^=1 then do; covid_vis_cnt=sum(covid_vis_cnt, 1); visit_=strip(visit_bak); end;
if rvflg=1 then
output __visits_sdtm_rv1a; else output __visits_sdtm_rv1;
if last.usubjid then
output __covid_vis_cnt; retain covid_vis_cnt visit_;run;
proc sql;
** Get visitnums for repeat visits. **; create table __visits_sdtm_rv2a as select distinct * from (select * from
__visits_sdtm_rv1a) left join (select visitnum from __visits_sdtm_rv1 as b
FDA-CBER-2022-5812-0072965
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] where rvflg ^=1) on usubjid=b.usubjid and visit=b.visit;
** Check if any of them missing visitnum from above. **;
create table __visits_sdtm_rv3a as select * from __visits_sdtm_rv2a left join (select visitnum as visitnum_rv, visit as visit_rv, astdt as astdt_rv, aendt as aendt_rv from __visits_sdtm_rv1 as b where domain='FA' and astdt ^=. and aendt ^=.) on usubjid=b.usubjid and b.astdt <=adt <=b.aendt and visitnum=.; ** Get visits count to assign visitnums. **; create table __visits_sdtm_rv4a as select * from __visits_sdtm_rv3a left join (select covid_vis_cnt from __covid_vis_cnt as b) on usubjid=b.usubjid order by domain, usubjid, visitnum, visit, adt, astdt, aendt;quit;
data __visits_sdtm_rv5a;
set __visits_sdtm_rv4a; by domain usubjid visitnum visit adt astdt aendt;
if visitnum=. then
do;
if visitnum_rv ^=. and visit_rv ^='' then
do; visitnum=visitnum_rv; visit=strip(visit_rv); end; else visitnum=sum(covid_vis_cnt, 1); end;run;
data __visits_raw;
set __visits_sdtm_rv1 __visits_sdtm_rv5a(drop=visitnum_rv visit_rv astdt_rv astdt_rv covid_vis_cnt);run;
proc sort data=__visits_raw out=__visits_raw_unq nodupkey;
by usubjid visitnum visit adt astdt aendt domain;run;
data __visits_all;
recseq=put(_n_, z7.); set __visits_raw_unq;
if domain in ('IS', 'LB', 'MB', 'VS') then
astdt=adt; *if domain = 'HO' and adt ^= . and astdt = . then astdt = adt;
if strip(visit) not in (&__excl_vis1a, &__excl_vis1b, &__excl_vis2,
&__excl_vis3) and visitnum ^=. and visit ^='' then visflg=1; else visflg=0;run;
FDA-CBER-2022-5812-0072966
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]proc sort data=__visits_all out=__visits1(drop=) nodupkey;
by usubjid astdt descending aendt visitnum visit;
where visflg=1;run;
proc sort data=__visits1 out=__visits_unq_vis1(keep=domain usubjid visitnum
visit) nodupkey; by usubjid visitnum visit;run;
** Check if an unplanned visit has FA records with date. **;proc sort data=__visits_all out=__visits1_fa nodupkey;
by usubjid visitnum visit; where domain='FA' and visflg=1;run;
** When no FA visit is present, then exclude. **;data __visits_unq_vis1_a(keep=usubjid visitnum visit eligflg);
merge __visits_unq_vis1(in=a) __visits1_fa(in=b); by usubjid visitnum visit;
if a and b then
eligflg=1;run;
data __visits_unq_vis2;
set __visits_unq_vis1_a(where=(eligflg=1)); by usubjid visitnum visit;
if first.usubjid and last.usubjid then
mlvisflg=0; else mlvisflg=1;run;
proc sql;
create table __visits2 as select * from __visits1 left join (select mlvisflg from __visits_unq_vis2 as b) on usubjid=b.usubjid and visitnum=b.visitnum order by usubjid, astdt, aendt desc, visitnum; ** For subjects that were not part of FA, combine their multiple different visits that have same start date into single visit. **; ** Add such records to __visit2 data. **; create table __visits2a as select * from __visits2 left join (select distinct usubjid as usubjid_same_dt from (select * from (select * from __visits2 where mlvisflg ^=1) inner join (select astdt as astdt_same, visitnum as visitnum_not, visit as visit_not from __visits2 as b) on usubjid=b.usubjid and astdt=b.astdt and visitnum ^=b.visitnum and visit ^=b.visit) as b) on usubjid=b.usubjid order by usubjid, astdt, aendt desc, visitnum;quit;
data __visits3(drop=mlvisflg usubjid_same_dt) __visits3a(drop=mlvisflg
usubjid_same_dt clsp_pros_flg);
FDA-CBER-2022-5812-0072967
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] set __visits2a;
by usubjid astdt descending aendt visitnum;
where mlvisflg=1 or usubjid_same_dt ^='';
if (domain='FA') or (domain='HO' and astdt ^=. and aendt ^=.) or (domain='VS'
and astdt ^=.) then do; clsp_pros_flg=1; output __visits3a; end; output __visits3;run;
data __visits4 __visits4_clsp(keep=recseq usubjid visitnum visit astdt clspfl
avisitn avisit); set __visits3a; nxtobs=_n_ + 1; by usubjid astdt descending aendt visitnum;
if not last.usubjid then
set __visits3a(keep=usubjid visitnum visit astdt aendt rename=(usubjid=usubjid_nxt visitnum=visitnum_nxt visit=visit_nxt astdt=astdt_nxt aendt=aendt_nxt)) point=nxtobs;
if first.usubjid then
do; astdt_=astdt; aendt_=aendt; visitnum_=visitnum; visit_=visit; end;
if usubjid=usubjid_nxt then
do;
if resetflg='Y' then
do; astdt_=astdt; aendt_=aendt; visitnum_=visitnum; visit_=visit; resetflg=''; end; ** Check if nxt start is in range of current and expand the date range. **;
if aendt_ ^=. and astdt_ <=astdt_nxt <=sum(aendt_, 3) then
do;
if aendt_ < astdt_nxt then
aendt_=astdt_nxt;
if aendt_nxt ^=. and aendt_ < aendt_nxt then
aendt_=aendt_nxt;
end;
FDA-CBER-2022-5812-0072968
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] ** Check the current dates and visits and collapse. **;
if visitnum_ ^=visitnum then
do;
if (aendt_=. and astdt_ <=astdt <=sum(astdt_, 3))
or (aendt_ ^=. and . < astdt_ <=astdt <=aendt_) then do; clspfl='Y'; avisitn=visitnum_; avisit=visit_; end; end;
if aendt=. and astdt <=astdt_nxt <=sum(astdt, 3) then
astdt_=astdt; end; ** Reset the _ vars with current visit.;
if (aendt_=. and sum(astdt_, 3) < astdt_nxt) or (aendt_ ^=. and
astdt_ < sum(aendt_, 3) < astdt_nxt) then resetflg='Y'; output __visits4;
if clspfl='Y' then
output __visits4_clsp; format astdt aendt astdt_nxt aendt_nxt astdt_ aendt_ yymmdd10.; retain visitnum_ visit_ astdt_ aendt_ resetflg;run;
proc sort data=__visits4_clsp out=__visits4_clsp_b nodupkey;
by recseq usubjid visitnum visit astdt clspfl avisitn avisit;run;
proc sql;
create table __visits5 as select * from __visits3 left join (select astdt as astdt_c, clspfl, avisitn as avisitn_c, avisit as avisit_c from __visits4_clsp_b as b where clspfl='Y') on usubjid=b.usubjid and ((visitnum=b.visitnum and clsp_pros_flg=. and b.astdt <=astdt) or (recseq=b.recseq and clsp_pros_flg=1)) order by usubjid, astdt, aendt desc, visitnum, recseq, astdt_c;quit;
data __visits6;
set __visits5; by usubjid astdt descending aendt visitnum recseq astdt_c;
if clspfl='Y' and avisitn=. then
do; avisitn=avisitn_c; avisit=avisit_c; end;
if avisitn=. then
FDA-CBER-2022-5812-0072969
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] do;
avisitn=visitnum;
avisit=visit; end;
if last.recseq then
keepflg=1;run;
** Prepare all visits. **;data __visits_raw_prepare;
set __visits_raw;
if domain in ('IS', 'LB', 'MB', 'VS') then
astdt=adt;
if domain in ('IS', 'LB', 'MB', 'VS') then
do; astdt=adt; adtflg=1; end;
if strip(visit) not in (&__excl_vis1a, &__excl_vis1b, &__excl_vis2,
&__excl_vis3) and astdt ^=. and visitnum ^=. and visit ^='' then visflg=1; else visflg=0;run;
proc sql;
create table __visits_all_1 as select * from __visits_all left join (select mlvisflg from __visits_unq_vis2 as b) on usubjid=b.usubjid and visitnum=b.visitnum; create table __visits_all_2 as select * from __visits_all_1 left join (select avisitn, avisit, clspfl from __visits6 as b where keepflg=1) on usubjid=b.usubjid and visitnum=b.visitnum and visit=b.visit and astdt=b.astdt and aendt=b.aendt; create table __visits_all_3 as select * from __visits_raw_prepare left join (select visflg as visflg_, mlvisflg, astdt as astdt_, aendt as aendt_, avisitn, avisit, clspfl from __visits_all_2 as b) on domain=b.domain and usubjid=b.usubjid and visitnum=b.visitnum and visit=b.visit and visitnum_bak=b.visitnum_bak and visit_bak=b.visit_bak and adt=b.adt and astdt=b.astdt and aendt=b.aendt order by usubjid, astdt_, aendt_ desc, visitnum;quit;
data clsp_covid_vis_test clsp_covid_vis(drop=adtflg rvflg visitnum_bak
visit_bak visflg_ visflg mlvisflg astdt_ aendt_); set __visits_all_3; by usubjid astdt_ descending aendt_ visitnum;
if not(visflg=1 and mlvisflg=1) then
do;
FDA-CBER-2022-5812-0072970
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] avisitn=visitnum;
avisit=strip(visit);
end;
if rvflg=1 then
do; visitnum=visitnum_bak; visit=visit_bak;
if avisitn=. then
avisitn=1; end; output clsp_covid_vis_test;
if adtflg=1 then
astdt=.;
if rvflg=1 then
clspfl='Y';
if visflg=1 or rvflg=1 then
output clsp_covid_vis;run;
** Report. **;proc sql;
create table __report1 as select distinct * from (select distinct * from clsp_covid_vis_test where strip(visit) not in (&__excl_vis1a, &__excl_vis1b, &__excl_vis2, &__excl_vis3)) inner join (select clspfl as clspfl_ from clsp_covid_vis_test as b where clspfl='Y') on usubjid=b.usubjid order by usubjid, astdt_, aendt_ desc, visitnum;quit;
data __report2(drop=rvflg visitnum_bak visit_bak visflg_ visflg mlvisflg astdt_
aendt_ clspfl_); set __report1; by usubjid astdt descending aendt visitnum;
if adtflg=1 then
astdt=.;run;
**** Drop all records for Phase 1 subjects from ADSYMPT ****;proc sql;
create table adsympt3_all as select * from adsympt2 left join (select avisitn as avisitn_clsp, avisit as avisit_clsp, clspfl from clsp_covid_vis as b where clspfl='Y') on domain=b.domain and usubjid=b.usubjid and visitnum=b.visitnum and visit=b.visit and adt=b.adt and astdt=b.astdt and aendt=b.aendt inner join (select phasen, phase from adsl c where phasen >=2) on usubjid=c.usubjid
order by usubjid, visitnum, visit, adt, astdt, aendt;
FDA-CBER-2022-5812-0072971
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]quit;
data adsympt4 adsympt (keep=usubjid visit: param: parcat: aval: adt astdt aendt
avisit avisitn); recseq=put(_n_, z7.); set adsympt3_all;
if clspfl='Y' then
do; avisitn=avisitn_clsp; avisit=avisit_clsp; end; avalc=strip(avalc);
if avalc='.' then
avalc='';
if avalc='UNKNOWN' then
avalc='UNK';
if avalc='POSITIVE' then
avalc='POS';
if avalc='INDETERMINATE' then
avalc='IND';
if avalc='NEGATIVE' then
avalc='NEG';run;
** Create status values results. **;proc sort data=adsympt;
by usubjid avisitn paramn aval avalc adt astdt;run;
data symp_all_1 ord_data_1(keep=usubjid visitnum visit avisitn avisit srtdt)
vis_colsp1(keep=usubjid visitnum visit avisitn avisit); recseq=put(_n_, z7.); set adsympt(keep=usubjid paramn paramcd param parcat1 aval avalc visitnum visit avisitn avisit adt astdt aendt); by usubjid avisitn paramn aval avalc adt astdt; stat=input(put(avalc, $stat.), ?? best.); srtdt=astdt; ** Group Symptoms and test results. **;
if strip(paramcd) in ('CHILLS', 'DIARRHEA', 'FEVER', 'NLTSTSML', 'NCOUG',
'NSTBRTH', 'NMUSPN', 'NSRTHROT', 'VOMIT') then do; grp=1; output symp_all_1; end;
if strip(paramcd) in ('CHILLS', 'DIARRHEA', 'FEVER', 'NLTSTSML', 'NCOUG',
FDA-CBER-2022-5812-0072972
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] 'NSTBRTH', 'NMUSPN', 'NSRTHROT', 'VOMIT') or strip(paramcd) in ('FATIGUE',
'HEADACHE', 'RIHNRA', 'NAUSEA', 'NNSLCONG') then
do; grp=2; output symp_all_1; end;
if strip(paramcd) in ('C19NIG') and strip(avisit) in ('V1_DAY1_VAX1_L',
'V401_DAY1_VAX1') then do; grp=21; ** These number assignments are used below. **; srtdt=adt; output symp_all_1; end;
if strip(paramcd) in ('RTCOV2NS') then
do; grp=22; srtdt=adt; output symp_all_1; end;
if strip(paramcd) in ('SARSCOV2') then
do; grp=23; srtdt=adt; output symp_all_1; end;
if strip(paramcd) in ('C19NIG') and strip(avisit) not in ('V1_DAY1_VAX1_L',
'V401_DAY1_VAX1') then do; grp=24; srtdt=adt; output symp_all_1; end;
if grp ^=. then
output ord_data_1;
if visitnum ^=avisitn or visit ^=avisit then
output vis_colsp1; format adt astdt aendt srtdt yymmdd10.;run;
proc sort data=ord_data_1 out=ord_data_1a noduprecs;
by usubjid srtdt avisitn avisit visitnum visit; where srtdt ^=. and avisit not in('V1_DAY1_VAX1_L', 'V2_VAX2_L', 'V401_DAY1_VAX1', 'V402_VAX2');run;
data ord_data_1b;
set ord_data_1a;
FDA-CBER-2022-5812-0072973
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] by usubjid srtdt avisitn avisit visitnum visit;
length avislist $1000;
if first.usubjid then
do; avislist=''; srtord=10; end; id=prxparse('/' || strip(avisit) || '/i'); call prxsubstr(id, avislist, point, lng);
if first.usubjid or (first.avisitn and lng=0) then
do; srtord + 2; keepflg=1; avislist=strip(strip(avislist) || ' ' || strip(avisit)); end;
if last.usubjid then
lastrec=1; retain avislist;run;
proc sql;
create table ord_data_1c as select * from (select distinct * from ord_data_1) left join (select srtord from ord_data_1b as b where keepflg=1) on usubjid=b.usubjid and avisitn=b.avisitn and avisit=b.avisit order by usubjid, avisitn, srtord, srtdt;quit;
data ord_data_1d;
set ord_data_1c; by usubjid avisitn srtord srtdt;
if first.usubjid then
srtord_b=0;
if avisit in ('V1_DAY1_VAX1_L', 'V2_VAX2_L', 'V401_DAY1_VAX1', 'V402_VAX2')
then do;
if strip(avisit) in ('V1_DAY1_VAX1_L', 'V401_DAY1_VAX1') then
do; srtord_b=srtord_b + 1; srtord=srtord_b; end;
if strip(avisit) in ('V2_VAX2_L', 'V402_VAX2') then
do; srtord_b=srtord_b + 1; srtord=srtord_b; end; end;
else
FDA-CBER-2022-5812-0072974
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] do;
if srtord=. then
do;
if first.usubjid then
srtord=10.1; else srtord=srtord_ + .1; end; srtord_=srtord; end; retain srtord_b srtord_;run;
proc sort data=vis_colsp1 out=vis_colsp2 nodupkey;
by usubjid avisitn avisit;run;
proc sql;
** Merge sort order. **; create table symp_all_2 as select * from symp_all_1 left join (select srtord from ord_data_1d as b) on usubjid=b.usubjid and visitnum=b.visitnum and visit=b.visit and avisitn=b.avisitn and avisit=b.avisit and srtdt=b.srtdt; ** Flag collapsed visits records. **; create table symp_all_3 as select * from symp_all_2 left join (select 1 as clspflg, avisitn as avisitn_colsp, avisit as avisit_colsp from vis_colsp2 as b) on usubjid=b.usubjid and avisitn=b.avisitn and avisit=b.avisit; ** Merge Death date. **; create table symp_all_4 as select * from symp_all_3 left join (select dthdt, vax101dt, vax102dt from adsl as b) on usubjid=b.usubjid order by usubjid, avisitn, avisit, grp, stat, astdt, visitnum, aendt;quit;
data symp_all_5 symp1(keep=recseq usubjid vax101dt vax102dt avisitn avisit
parcat1 grp stat dthdt srtord clspflg grpcat grp_stdt grp_endt visitnum_ visit_ rename=(grp_stdt=astdt grp_endt=aendt visitnum_=visitnum visit_=visit)) nva_naat1(keep=recseq usubjid vax101dt vax102dt visitnum visit avisitn avisit paramn paramcd param parcat1 aval avalc grp adt srtord dthdt stat clspflg); set symp_all_4; by usubjid avisitn avisit grp stat astdt visitnum aendt;
if avisitn_colsp ^=. then
clspflg=1;
if grp in (1, 2) then
grpcat=1;
if first.grp then
do; grp_stdt=astdt; grp_endt=aendt;
grp_stat=stat;
FDA-CBER-2022-5812-0072975
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] visitnum_=visitnum;
visit_=visit;
end;
if grp_stat < stat or grp in (7, 8) then
do; grp_stdt=astdt; grp_endt=aendt; grp_stat=stat; visitnum_=visitnum; visit_=visit; end;
if grp_stdt=. and stat=4 then
grp_stdt=astdt;
if (. < grp_endt < aendt) or aendt=. then
grp_endt=aendt;
if last.grp and grp < 20 then
keepflg=1; output symp_all_5;
if keepflg=1 then
output symp1;
if grp in (21, 22, 23, 24) then
output nva_naat1; format grp_stdt grp_endt yymmdd10.; retain grp_stdt grp_endt grp_stat visitnum_ visit_;run;
proc sort data=symp1;
by usubjid avisitn avisit grpcat grp stat astdt aendt visitnum;run;
data symp2(drop=vis_endtfl setflg vis_stat vis_astdt vis_aendt vis_endtfl_cdc
setflg_cdc vis_stat_cdc vis_astdt_cdc vis_aendt_cdc); set symp1; by usubjid avisitn avisit grpcat grp stat astdt aendt visitnum;
if first.avisitn then
do; vis_endtfl=0; vis_endtfl_cdc=0; setflg=0; setflg_cdc=0; end;
if setflg=0 and 3 <=grp <=7 then
do; vis_stat=stat; vis_astdt=astdt;
vis_aendt=aendt;
FDA-CBER-2022-5812-0072976
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] setflg=1;
end;
if setflg_cdc=0 and 8 <=grp <=9 then
do; vis_stat_cdc=stat; vis_astdt_cdc=astdt; vis_aendt_cdc=aendt; setflg_cdc=1; end;
if 3 <=grp <=7 then
do;
if aendt=. or stat ^=4 then
vis_endtfl=1;
if vis_stat <=stat then
do; vis_stat=stat;
if vis_astdt=. or (vis_astdt ^=. and . < astdt < vis_astdt) then
vis_astdt=astdt; end;
if vis_stat=stat and astdt < vis_astdt then
vis_astdt=astdt;
if . < vis_aendt < aendt then
vis_aendt=aendt; end;
if 8 <=grp <=9 then
do;
if aendt=. or stat ^=4 then
vis_endtfl_cdc=1;
if vis_stat_cdc <=stat then
do; vis_stat_cdc=stat;
if vis_astdt_cdc=. or (vis_astdt_cdc ^=. and . < astdt < vis_astdt_cdc)
then vis_astdt_cdc=astdt; end;
if vis_stat_cdc=stat and astdt < vis_astdt_cdc then
vis_astdt_cdc=astdt;
if . < vis_aendt_cdc < aendt then
vis_aendt_cdc=aendt; end;
output;
FDA-CBER-2022-5812-0072977
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] if last.grpcat then
do;
if grpcat=2 then
do; grp=20.1; stat=vis_stat; astdt=vis_astdt;
if vis_endtfl=0 then
aendt=vis_aendt; else aendt=.; parcat1='SEVERE COVID-19 SYMPTOMS'; output; end;
if grpcat=3 then
do; grp=20.2; stat=vis_stat_cdc; astdt=vis_astdt_cdc;
if vis_endtfl_cdc=0 then
aendt=vis_aendt_cdc; else aendt=.; parcat1='SEVERE COVID-19 SYMPTOMS'; output; end; end; retain vis_endtfl vis_endtfl_cdc setflg setflg_cdc vis_stat vis_astdt vis_aendt vis_stat_cdc vis_astdt_cdc vis_aendt_cdc;run;
proc sql;
** Merge symptom dates based on VISITNUM. **; create table nva_naat1a as select * from nva_naat1 left join (select usubjid as usubjid_v, min(astdt) as astdt_sym_v format yymmdd10., max(aendt) as aendt_sym_v format yymmdd10. from symp_all_3 as b where grp in (1, 2) and astdt ^=. group by usubjid, visitnum, visit) on usubjid=b.usubjid and visitnum=b.visitnum and visit=b.visit order by usubjid, vax101dt, vax102dt, avisitn, avisit, visitnum, visit, grp, adt; ** Merge symptom dates based on AVISITN. **; create table nva_naat1b as select * from nva_naat1a left join (select usubjid as usubjid_av, min(astdt) as astdt_sym_av format yymmdd10., max(aendt) as aendt_sym_av format yymmdd10. from symp1 as b where grp in (1, 2) and astdt ^=. group by usubjid, avisitn, avisit) on usubjid=b.usubjid and avisitn=b.avisitn and avisit=b.avisit order by usubjid, vax101dt, vax102dt, avisitn, avisit, visitnum, visit, grp, stat, adt;quit;
** Determine if NVA or NAAT result/s are valid based on dates to exclude multiple records that are out of window. **;
FDA-CBER-2022-5812-0072978
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]data nva_naat2 nva_naat_flags(keep=usubjid vax101dt vax102dt dthdt vldrslfl
vrblngfl crd1ngfl crd2ngfl pdp17fl_ pdp27fl_); **** Use this dataset for flags *****; set nva_naat1b; by usubjid vax101dt vax102dt avisitn avisit visitnum visit grp stat adt; ** Derive result flags. **;
if first.usubjid then
do; vrblngfl='U'; crd1ngfl='U'; crd2ngfl='U'; pdp17fl_='N'; pdp27fl_='N'; end; vldrslfl='N';
if strip(avisit) in ('V1_DAY1_VAX1_L', 'V401_DAY1_VAX1') then
do;
if . < adt <=vax101dt then
vldrslfl='Y';
if vldrslfl='Y' and strip(put(stat, stat.))='POS' then
do;
if grp=21 then
vrblngfl='N';
if grp=22 then
crd1ngfl='N'; end;
if vldrslfl='Y' and strip(put(stat, stat.))='NEG' then
do;
if grp=21 then
vrblngfl='Y';
if grp=22 then
crd1ngfl='Y'; end;
if last.avisitn and vrblngfl='Y' and crd1ngfl='Y' then
pdp17fl_='Y'; end; else if strip(avisit) in ('V2_VAX2_L', 'V402_VAX2') then do;
if . < adt <=vax102dt then
vldrslfl='Y';
if vldrslfl='Y' and strip(put(stat, stat.))='POS' and grp=22 then
FDA-CBER-2022-5812-0072979
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] crd2ngfl='N';
if vldrslfl='Y' and strip(put(stat, stat.))='NEG' and grp=22 then
crd2ngfl='Y';
if last.avisitn and vrblngfl='Y' and crd1ngfl='Y' and crd2ngfl='Y' then
pdp27fl_='Y'; end; else if strip(avisit) not in ('V1_DAY1_VAX1_L', 'V2_VAX2_L', 'V401_DAY1_VAX1', 'V402_VAX2') and grp ^=24 then do;
if usubjid_av ^='' then
do;
if astdt_sym_av ^=. and aendt_sym_av=. and sum(astdt_sym_av, -4) <=adt then
vldrslfl='Y';
if astdt_sym_av ^=. and aendt_sym_av ^=. and sum(astdt_sym_av, -4)
<=adt <=sum(aendt_sym_av, 4) then vldrslfl='Y'; end; else if usubjid_v ^='' then do;
if astdt_sym_v ^=. and aendt_sym_v=. and sum(astdt_sym_v, -4) <=adt then
vldrslfl='Y'; else if astdt_sym_v ^=. and aendt_sym_v ^=. and sum(astdt_sym_v, -4) <=adt <=sum(aendt_sym_v, 4) then vldrslfl='Y'; end; else cncrslfl='Y'; end;
if first.grp and last.grp then
cncrslfl='Y'; else do; ** Check if multiple results are present and valid. **;
if vldrslfl='Y' then
cncrslfl='Y'; end; output nva_naat2;
if last.usubjid then
output nva_naat_flags; retain vrblngfl crd1ngfl crd2ngfl pdp17fl_ pdp27fl_;run;
proc sort data=nva_naat2 out=nva_naat3(drop=usubjid_v usubjid_av);
by usubjid vax101dt vax102dt avisitn avisit visitnum visit grp stat adt;
where cncrslfl='Y';
FDA-CBER-2022-5812-0072980
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]run;
***** Chek Number of Subjects with VRBLNGFL='Y' and CRD1NGFL='Y' and CRD2NGFL='Y' ******;
proc sql noprint;
select count (distinct usubjid) into :n1 from nva_naat_flags where VRBLNGFL='Y' and CRD1NGFL='Y' and CRD2NGFL='Y' and usubjid in (select distinct usubjid from adsl where saffl='Y');quit;
data nva_naat4 nva_naat4a(keep=usubjid adt stat rename=(adt=nva_dt stat=nva))
nva_naat4b(keep=usubjid adt stat rename=(adt=cnt_1dt stat=cnt_1)) nva_naat4c(keep=usubjid adt stat rename=(adt=cnt_2dt stat=cnt_2)) nva_naat4d(keep=usubjid vax101dt vax102dt avisitn avisit visitnum visit adt stat srtord clspflg vldrslfl rename=(vldrslfl=c_vldrslfl adt=cnt_unp_dt stat=cnt_unp srtord=cnt_srtord)) nva_naat4e(keep=usubjid vax101dt vax102dt avisitn avisit visitnum visit adt stat srtord clspflg vldrslfl rename=(vldrslfl=l_vldrslfl adt=lcl_unp_dt stat=lcl_unp srtord=lcl_srtord)) nva_naat4f(keep=recseq usubjid vax101dt vax102dt adt grp stat rename=(recseq=recseq_f adt=nva_v3_dt stat=nva_v3)) nva_naat4g(keep=recseq usubjid vax101dt vax102dt adt grp stat c19cnv_dy rename=(recseq=recseq_g adt=nva_cnv_dt stat=nva_cnv)); set nva_naat3; by usubjid vax101dt vax102dt avisitn avisit visitnum visit grp stat adt;
if grp=24 and strip(avisit) not in ('V3_MONTH1_POSTVAX2_L',
'V404_MONTH1_POSTVAX2') and vax102dt ^=. then do; c19cnv_dy=adt - vax102dt + 1; end;
if last.grp and grp <=23 then
keepflg=1;
if grp=24 then
keepflg=1; output nva_naat4;
if keepflg=1 then
do;
if grp=21 and strip(avisit) in ('V1_DAY1_VAX1_L', 'V401_DAY1_VAX1') then
output nva_naat4a;
if grp=22 and strip(avisit) in ('V1_DAY1_VAX1_L', 'V401_DAY1_VAX1') then
output nva_naat4b;
if grp=22 and strip(avisit) in ('V2_VAX2_L', 'V402_VAX2') then
output nva_naat4c;
if grp=22 and strip(avisit) not in ('V1_DAY1_VAX1_L', 'V2_VAX2_L',
'V401_DAY1_VAX1', 'V402_VAX2') then output nva_naat4d;
FDA-CBER-2022-5812-0072981
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] if grp=23 and strip(avisit) not in ('V1_DAY1_VAX1_L', 'V2_VAX2_L',
'V401_DAY1_VAX1', 'V402_VAX2') then
output nva_naat4e;
if grp=24 then
do;
if strip(avisit) in ('V3_MONTH1_POSTVAX2_L', 'V404_MONTH1_POSTVAX2') then
output nva_naat4f; else output nva_naat4g; end; end;run;
** Process central and local lab rerults. **;data cnt_lcl1;
merge nva_naat4d(in=a) nva_naat4e(in=b); by usubjid vax101dt vax102dt avisitn avisit visitnum visit; ** Conclude NAAT result for unplanned visits. **;
if c_vldrslfl='Y' then
do; naat_unp=cnt_unp; naat_unp_dt=cnt_unp_dt; srtord_swab=cnt_srtord; end; else if c_vldrslfl ^='Y' and l_vldrslfl='Y' then do; naat_unp=lcl_unp; naat_unp_dt=lcl_unp_dt; srtord_swab=lcl_srtord; end;
if c_vldrslfl ^='Y' and l_vldrslfl ^='Y' then
do;
if nmiss(cnt_unp, naat_unp) < 2 then
stat_sort=max(cnt_unp, naat_unp);
if nmiss(cnt_unp_dt, naat_unp_dt) < 2 then
dt_sort=max(cnt_unp_dt, naat_unp_dt); end; else do; stat_sort=naat_unp; dt_sort=naat_unp_dt; end;
if srtord_swab=. then
do;
if cnt_srtord ^=. then
FDA-CBER-2022-5812-0072982
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] srtord_swab=cnt_srtord;
if cnt_srtord=. and lcl_srtord ^=. then
srtord_swab=lcl_srtord; end;
if c_vldrslfl='Y' or l_vldrslfl='Y' then
vunprfl='Y'; format naat_unp_dt yymmdd10.;run;
proc sort data=cnt_lcl1;
by usubjid vax101dt vax102dt avisitn avisit vunprfl naat_unp stat_sort dt_sort;run;
data cnt_lcl2(drop=stat_sort);
****** Use this dataset for conlcuded lab results *****; set cnt_lcl1; by usubjid vax101dt vax102dt avisitn avisit vunprfl naat_unp stat_sort dt_sort;
if last.avisitn then
keepflg=1; naat_rslt_flg=1; rename visitnum=visitnum_ visit=visit_;run;
** Merge result flags with symptom data. **;data symp3a(drop=keepflg);
merge symp2(in=a) cnt_lcl2(in=b where=(keepflg=1)); by usubjid avisitn avisit;
if a and not b then
mflg=1;
if a and b then
mflg=2;
if not a and b then
mflg=3;
if mflg=3 and visitnum=. then
do; visitnum=visitnum_; visit=visit_; srtord=srtord_swab; end;run;
data symp3b;
merge symp3a(in=a) nva_naat_flags(in=b drop=vax101dt vax102dt vldrslfl) nva_naat4a(in=c) nva_naat4b(in=d) nva_naat4c(in=d); by usubjid;
FDA-CBER-2022-5812-0072983
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] if a;
call missing(stdy1, stdy2);
if astdt ^=. then
do;
if vax101dt ^=. then
do;
if astdt >=vax101dt then
stdy1=(astdt - vax101dt) + 1; else stdy1=(astdt - vax101dt); end;
if vax102dt ^=. then
do;
if astdt >=vax102dt then
stdy2=(astdt - vax102dt) + 1; else stdy2=(astdt - vax102dt); end; end;
if vrblngfl='' then
vrblngfl='U';
if crd1ngfl='' then
crd1ngfl='U';
if crd2ngfl='' then
crd2ngfl='U';
if pdp17fl_='' then
pdp17fl_='N';
if pdp27fl_='' then
pdp27fl_='N'; rename pdp17fl_=pdp17fl_tmp pdp27fl_=pdp27fl_tmp;run;
proc sort data=symp3b out=symp3c;
by usubjid vax101dt vax102dt srtord avisitn avisit grpcat grp astdt;run;
data symp3d;
retain recseq usubjid parcat1 visitnum visit avisitn avisit clspflg vax101dt vax102dt dthdt nva nva_dt vrblngfl cnt_1 cnt_1dt crd1ngfl cnt_2 cnt_2dt crd2ngfl grpcat grp stat astdt aendt stdy1 stdy2 cnt_unp cnt_unp_dt c_vldrslfl lcl_unp lcl_unp_dt l_vldrslfl naat_unp naat_unp_dt vunprfl naat_rslt_flg pdp17fl_tmp pdp27fl_tmp; set symp3c;
by usubjid vax101dt vax102dt srtord avisitn avisit grpcat grp astdt;
FDA-CBER-2022-5812-0072984
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM]run;
** Determine NAAT unplanned result and derive case. **;
***** Use symp4 dataset to identify subjects with symptoms and no valid NEG result *****;
data symp4(drop=naat_unp_) symp_all_flags(keep=usubjid vax101dt vax102dt dthdt
pdsymfl_ pdsdmfl_ cdcsymfl_ sevsymfl_ sevcdcfl_ pdrmufl_ pdrmupfl_ cdcrmufl_ cdrmupfl_ pdp1fl_ pdp17fl_ pdp27fl_ pdp214fl_ cdp1fl_ cdp17fl_ cdp27fl_ cdp214fl_); set symp3d end=eof; by usubjid vax101dt vax102dt srtord avisitn avisit grpcat grp astdt; ** Setting the flags. **;
if first.usubjid then
do; pdsymfl_='N'; pdsdmfl_='N'; cdcsymfl_='N'; sevsymfl_='N'; sevcdcfl_='N'; pdrmufl_='N'; pdrmupfl_='N'; cdcrmufl_='N'; cdrmupfl_='N'; pdp1fl_=pdp17fl_tmp; pdp17fl_=pdp17fl_tmp; pdp27fl_=pdp27fl_tmp; pdp214fl_=pdp27fl_tmp; cdp1fl_=pdp1fl_; cdp17fl_=pdp17fl_; cdp27fl_=pdp27fl_; cdp214fl_=pdp27fl_; filocrfl_pd_=''; filocrfl_cdc_=''; filocrfl_sev_=''; filocrfl_sev_cdc_=''; pd_fst_pos_dt=.; astdt_pd_res_miss=.; cd_fst_pos_dt=.; astdt_cdc_res_miss=.; last_vis_end_dt=.; end; ** If concluded lab result out of CDC defined symptoms date/s, reset the valid flag. **;
if grp=2 then
do;
if astdt=. or naat_unp_dt=. then
vunprfl=''; else do;
if aendt=. and sum(astdt, -4) <=naat_unp_dt then
vunprfl='Y';
FDA-CBER-2022-5812-0072985
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] else if aendt ^=. and sum(astdt, -4) <=naat_unp_dt <=sum(aendt, 4) then
vunprfl='Y';
else vunprfl=''; end; end; ** Determine illness onset for protocol defined, CDC defined and severe symptoms. **;
if first.avisitn then
do; c19onst_=-1; cdconst_=-1; end;
if strip(put(stat, stat.))='POS' and vunprfl='Y' then
do;
if strip(put(naat_unp, stat.)) in ('') then
naat_unp_=input(put('UNK', $stat.), ?? best.); else naat_unp_=naat_unp;
if grp=1 then
c19onst=naat_unp_;
if grp=2 then
cdconst=naat_unp_; end; else if strip(put(stat, stat.))='POS' and vunprfl='' then do;
if grp=1 then
c19onst=input(put('UNK', $stat.), ?? best.);
if grp=2 then
cdconst=input(put('UNK', $stat.), ?? best.); end; else if strip(put(stat, stat.)) in ('', 'NEG') then do;
if grp=1 then
c19onst=input(put('NEG', $stat.), ?? best.);
if grp=2 then
cdconst=input(put('NEG', $stat.), ?? best.); end;
if grp=1 then
c19onst_=c19onst;
if grp=2 then
cdconst_=cdconst;
if grp=20.1 then
FDA-CBER-2022-5812-0072986
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] do;
if c19onst_=-1 then
c19onst_=2;
if strip(put(stat, stat.))='POS' then
sevconst=c19onst_;
if strip(put(stat, stat.)) in ('', 'NEG') then
sevconst=input(put('NEG', $stat.), ?? best.);
if strip(put(c19onst_, stat.))='POS' and last.usubjid and dthdt ^=. then
sevconst=input(put('POS', $stat.), ?? best.); end;
if grp=20.2 then
do;
if cdconst_=-1 then
cdconst_=2;
if strip(put(stat, stat.))='POS' then
cdcsonst=cdconst_;
if strip(put(stat, stat.)) in ('', 'NEG') then
cdcsonst=input(put('NEG', $stat.), ?? best.);
if strip(put(cdconst_, stat.))='POS' and last.usubjid and dthdt ^=. then
cdcsonst=input(put('POS', $stat.), ?? best.); end;
if strip(put(c19onst, stat.))='POS' and pd_fst_pos_dt=. then
pd_fst_pos_dt=astdt;
if strip(put(cdconst, stat.))='POS' and cd_fst_pos_dt=. then
cd_fst_pos_dt=astdt;
if grp=1 then
do;
if strip(put(stat, stat.))='POS' then
do; pdsymfl_='Y';
if astdt=. then
pdsdmfl_='Y';
if strip(put(c19onst, stat.)) not in ('NEG', 'POS') then
do; astdt_pd_res_miss=astdt;
if (pd_fst_pos_dt=.) or (. < astdt < pd_fst_pos_dt) then
do;
pdrmufl_='Y';
FDA-CBER-2022-5812-0072987
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] pdrmupfl_='Y';
end;
end;
if strip(put(c19onst, stat.))='POS' and pdrmupfl_='Y'
and . < astdt_pd_res_miss < pd_fst_pos_dt then pdrmupfl_='N'; end; end;
if grp=2 then
do;
if strip(put(stat, stat.))='POS' then
do; cdcsymfl_='Y';
if strip(put(cdconst, stat.)) not in ('NEG', 'POS') then
do; astdt_cdc_res_miss=astdt;
if (cd_fst_pos_dt=.) or (. < astdt < cd_fst_pos_dt) then
do; cdcrmufl_='Y'; cdrmupfl_='Y'; end; end;
if strip(put(cdconst, stat.))='POS' and cdrmupfl_='Y'
and . < astdt_cdc_res_miss < cd_fst_pos_dt then cdrmupfl_='N'; end; end;
if grp=20.1 and strip(put(stat, stat.))='POS' then
sevsymfl_='Y';
if grp=20.2 and strip(put(stat, stat.))='POS' then
sevcdcfl_='Y';
if dthdt ^=. then
do; sevsymfl_='Y'; sevcdcfl_='Y'; end;
if grp=1 and c19onst=input(put('POS', $stat.), ?? best.) then
do;
if (vrblngfl='Y' and crd1ngfl='Y' and . < vax101dt=astdt)
or (. < vax101dt < astdt) then ild1fl_pd='Y'; else
ild1fl_pd='N';
FDA-CBER-2022-5812-0072988
file:///J/...45-0%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsl-sas.txt[7/5/2023 10:22:53 AM] if . < vax101dt < sum(vax101dt, 7) <=astdt then
ild17fl_pd='Y'; else ild17fl_pd='N';
if (crd2ngfl='Y' and . < vax102dt=astdt) or (. < vax102dt < astdt) then
ild2fl_pd='Y'; else ild2fl_pd='N';
if . < vax102dt < sum(vax102dt, 7) <=astdt then
ild27fl_pd='Y'; else ild27fl_pd='N';
if . < vax102dt < sum(vax102dt, 14) <=astdt then
ild214fl_pd='Y'; else ild214fl_pd='N';
if filocrfl_pd_='' then
do; filocrfl_pd_='Y'; filocrfl_pd='Y'; end; end;
if grp=2 and cdconst=input(put('POS', $stat.), ?? best.) then
do;
if (vrblngfl='Y' and crd1ngfl='Y' and . < vax101dt=astdt)
or (. < vax101dt < astdt) then ild1fl_c
…[truncated]