*****************************************************************************************************************; ** Program Name : adc19ef.sas **; ** Date Created : 28Mar2021 **; ** Programmer Name: ZHANGR17 **; ** Purpose : Create adc19ef dataset **; ** Input data : adsl adsympt **; ** Output data : adc19ef.sas7bdat **; ******************************************************************************************************************; options mprint mlogic symbolgen mprint symbolgen mlogic nocenter missing=" "; proc datasets library=WORK kill nolist nodetails; quit; %let oprot=/Volumes/app/cdars/prod/sites/cdars4/prjC459/nda2_unblinded_esub/bla_euaext_esub_sdtm/saseng/cdisc3_0; %let prot=/Volumes/app/cdars/prod/sites/cdars4/prjC459/nda2_unblinded_esub/bla_esub_adam/saseng/cdisc3_0; libname dataprot "&oprot./data" access=readonly; libname datvprot "&prot./data_vai"; proc printto print="&prot./analysis/esub/output/adc19ef.rpt" log="&prot./analysis/esub/logs/adc19ef.log" new; run; *Insert the date of snapshot; %let data_cutoff_date = %str(2021-03-13); %let cutoff_case_count = 500; ******************************************************************************************; * Clean *; ******************************************************************************************; proc delete data=work._all_; run; ******************************************************************************************; * Format *; ******************************************************************************************; proc format; 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' ; run; data unblnd_dt; unblnddt = .; set datvprot.adsl(keep = usubjid unblnddt); run; proc sql; create table adsympt1 as select * from datvprot.adsympt left join (select unblnddt from unblnd_dt as b where unblnddt ^= .) on strip(usubjid) = strip(b.usubjid) order by usubjid, avisitn, paramn, aval, avalc, adt, astdt; create table symp_prsnt as select distinct usubjid, visitnum, visit, avisitn, avisit, sum(aval) as aval, 1 as symp_prsnt_flg from adsympt1 where strip(paramcd) in ('CHILLS','DIARRHEA','FEVER','NLTSTSML','NCOUG','NSTBRTH','NMUSPN','NSRTHROT','VOMIT','RESP','HR', 'OXYSAT','DIABP','SYSBP', 'PO2FIO2','INTBTION','NIPPV','CPAP','OXYTHRP','MCHVENT','ECMO','HFOXTHRP','VSOPRES','SARDFN','SAHDFN','SANDFN','HCUICU','HCUHSP') group by usubjid, visitnum, visit, avisitn, avisit; create table adsympt2 as select * from adsympt1 left join (select symp_prsnt_flg from symp_prsnt as b) on strip(usubjid) = strip(b.usubjid) and visitnum = b.visitnum and strip(visit) = strip(b.visit) and avisitn = b.avisitn and strip(avisit) = strip(b.avisit) order by usubjid, avisitn, paramn, aval, avalc, adt, astdt; quit; ** Cutoff at unblinded date. **; data unblnd1; set adsympt2(keep = usubjid visitnum visit avisitn avisit paramn paramcd aval avalc unblnddt adt astdt aendt symp_prsnt_flg); by usubjid avisitn paramn aval avalc adt astdt; length stdt endt 8 unbl_vis_list $1000; if first.usubjid then do; unbl_vis_list = ''; endt = .; end; if strip(paramcd) in ('RESP','HR','OXYSAT','DIABP','SYSBP','PO2FIO2','C19NIG','RTCOV2NS','SARSCOV2','PRCDTH','SECDTH') then stdt = adt; else do; stdt = astdt; endt = aendt; if astdt = . and endt <= aendt then endt = aendt; if astdt ^= . and aendt = . and endt < astdt then endt = .; end; if unblnddt = . then do; if not (indexw(strip(unbl_vis_list),strip(avisit))) then unbl_vis_list = strip(unbl_vis_list) || ' ' || strip(avisit); end; else do; if (strip(paramcd) in ('RTCOV2NS','SARSCOV2') and (strip(avisit) in ('V1_DAY1_VAX1_L','V2_VAX2_L','V201_SURVEIL_CONSENT') or substr(avisit,1,10) = 'SSWAB_WEEK' or symp_prsnt_flg = .)) or (strip(paramcd) not in ('RTCOV2NS','SARSCOV2')) then do; if not (indexw(strip(unbl_vis_list),strip(avisit))) then do; if (stdt = .) or (. < stdt <= unblnddt) then unbl_vis_list = strip(unbl_vis_list) || ' ' || strip(avisit); end; end; end; if last.usubjid then keepflg = 1; format adt astdt aendt unblnddt stdt endt yymmdd10.; retain endt unbl_vis_list; run; data unblnd2(drop = paramn paramcd aval avalc); set unblnd1; by usubjid avisitn paramn aval avalc adt astdt; where unbl_vis_list ^= '' and keepflg = 1; run; data adsympt_cutoff unblnd_cutoff(keep = usubjid paramn paramcd aval avalc visitnum visit avisitn avisit adt astdt aendt unblnddt endt unbl_vis_list blnd_cutoff_flg); merge adsympt2(in = a) unblnd2(in = b keep = usubjid endt unbl_vis_list); by usubjid; if indexw(strip(unbl_vis_list),strip(avisit)) then blnd_cutoff_flg = 1; if unblnddt = . or (paramcd in ('PRCDTH','SECDTH') and adt < unblnddt) then blnd_cutoff_flg = 1; run; proc sort data = adsympt_cutoff out = adsympt(drop = endt unbl_vis_list blnd_cutoff_flg); by usubjid avisitn paramn aval avalc adt astdt; where blnd_cutoff_flg = 1; run; ** End unblind cutoff. **; data symp_all_1 ord_data_1(keep = usubjid visitnum visit avisitn avisit srtdt) death(drop = ady astdy aendt aendy mbspec avisitn avisit res c19ilhfl) 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 ady astdy aendy vax101dt vax102dt mbspec c19ilhfl unblnddt); by usubjid avisitn paramn aval avalc adt astdt; length res $8; ** Determine result conditions. **; if aval = . and strip(avalc) = '' then stat = 0; else if strip(paramcd) = 'RESP' and aval ^= . then do; if aval < 30 then res = 'NEG'; else res = 'POS'; end; else if strip(paramcd) = 'HR' and aval ^= . then do; if aval < 125 then res = 'NEG'; else res = 'POS'; end; else if strip(paramcd) = 'OXYSAT' and aval ^= . then do; if aval > 93 then res = 'NEG'; else res = 'POS'; end; else if strip(paramcd) = 'DIABP' and aval ^= . then do; if aval >= 60 then res = 'NEG'; else res = 'POS'; end; else if strip(paramcd) = 'SYSBP' and aval ^= . then do; if aval >= 90 then res = 'NEG'; else res = 'POS'; end; else if strip(paramcd) = 'PO2FIO2' and aval ^= . then do; if aval >= 300 then res = 'NEG'; else res = 'POS'; end; else if strip(paramcd) = 'VSOPRES' then do; if avalc ^= '' then res = 'POS'; else res = 'NEG'; end; else stat = input(put(avalc,$stat.), ?? best.); if res ^= '' and stat = . then stat = input(put(res,$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','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 ('RESP','HR','OXYSAT','DIABP','SYSBP','PO2FIO2') then do; grp = 3; astdt = adt; srtdt = adt; output symp_all_1; end; if strip(paramcd) in ('INTBTION','NIPPV','CPAP','OXYTHRP','MCHVENT','ECMO','HFOXTHRP') then do; grp = 4; output symp_all_1; end; if strip(paramcd) in ('VSOPRES') then do; grp = 5; output symp_all_1; end; if strip(paramcd) in ('SARDFN','SAHDFN','SANDFN') then do; grp = 6; output symp_all_1; end; if strip(paramcd) in ('HCUICU') then do; grp = 7; output symp_all_1; end; if strip(paramcd) in ('HCUHSP') then do; grp = 11; output symp_all_1; end; if strip(paramcd) in ('MCHVENT','ECMO','HCUICU','HCUHSP') then do; grp = 12; output symp_all_1; end; if strip(paramcd) in ('C19NIG') and strip(avisit) = 'V1_DAY1_VAX1_L' 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 grp ^= . then output ord_data_1; if strip(paramcd) in ('PRCDTH','SECDTH') then output death; if visitnum ^= avisitn or visit ^= avisit then output vis_colsp1; format adt astdt aendt vax101dt vax102dt srtdt yymmdd10.; run; ** Process Deaths. **; data death1; set death; by usubjid; length cause $400; if first.usubjid then cause = strip(avalc); else cause = strip(cause) || ' , ' || strip(avalc); if last.usubjid then do; avalc = 'N'; if indexw(cause,'COVID') or indexw(cause,'COVID-19') then avalc = 'Y'; grp = 10; stat = input(put(avalc,$stat.), ?? best.); astdt = adt; srtdt = adt; keepflg = 1; end; retain cause; run; proc sql; create table death2 as select * from (select * from death1 where keepflg = 1) left join (select adt as adt_, astdt as astdt_, grp as grp_, avisitn, avisit from symp_all_1 as b) on strip(usubjid) = strip(b.usubjid) and ((b.grp < 20 and . < b.astdt <= adt) or (b.grp > 20 and . < b.adt <= adt)) order by usubjid, adt_, astdt_; quit; data death3(drop = keepflg); set death2; by usubjid adt_ astdt_; if grp_ < 20 then finaldt = astdt_; if grp_ > 20 then finaldt = adt_; format finaldt yymmdd10.; run; proc sort data = death3; by usubjid finaldt; run; data death4(drop = adt_ astdt_ grp_ finaldt); set death3; by usubjid finaldt; if last.usubjid then do; output; grp = 20; output; end; run; data ord_data_1_dth; set ord_data_1 death4(keep = usubjid visitnum visit avisitn avisit srtdt); run; proc sort data = ord_data_1_dth 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'); run; data ord_data_1b; set ord_data_1a; 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_dth) 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') then do; if strip(avisit) = 'V1_DAY1_VAX1_L' then do; srtord_b = srtord_b + 1; srtord = srtord_b; end; if strip(avisit) = 'V2_VAX2_L' then do; srtord_b = srtord_b + 1; srtord = srtord_b; end; end; else 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; data symp_all_1_dth; set symp_all_1 death4; run; proc sql; ** Merge sort order. **; create table symp_all_2 as select * from symp_all_1_dth 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 adt as dthdt from death4 as b where grp = 10) 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 c19ilhfl srtord clspflg grpcat grp_stdt grp_endt visitnum_ visit_ unblnddt 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 mbspec grp adt srtord dthdt stat c19ilhfl clspflg unblnddt); 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 3 <= grp <= 10 then grpcat = 2; if 11 <= grp <= 20 then grpcat = 3; if first.grp then do; grp_stdt = astdt; grp_endt = aendt; grp_stat = stat; visitnum_ = visitnum; visit_ = visit; end; if grp_stat < stat or grp in (7,11) 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; if grp in (7,11) then keepflg = 1; output symp_all_5; if keepflg = 1 then output symp1; if grp in (21,22,23) 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 vs_dth_only 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; vs_dth_only = 1; setflg = 0; setflg_cdc = 0; end; if setflg = 0 and 3 <= grp <= 10 then do; vis_stat = stat; vis_astdt = astdt; vis_aendt = aendt; if stat = 2 then vis_aendt = astdt; setflg = 1; if stat = 2 and astdt = . then setflg = 0; if grp = 3 and stat = 2 then setflg = 0; end; if setflg_cdc = 0 and 11 <= grp <= 20 then do; vis_stat_cdc = stat; vis_astdt_cdc = astdt; vis_aendt_cdc = aendt; setflg_cdc = 1; end; if 3 <= grp <= 10 then do; if grp not in (3,10) then vs_dth_only = 0; if aendt = . or stat ^= 4 then vis_endtfl = 1; if aendt = . and stat = 2 then vis_endtfl = 0; 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 11 <= grp <= 20 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; if last.grpcat then do; if grpcat = 2 then do; grp = 20.1; stat = vis_stat; astdt = vis_astdt; if vis_endtfl = 0 and vs_dth_only = 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 vs_dth_only setflg setflg_cdc vis_stat vis_astdt vis_aendt vis_stat_cdc vis_astdt_cdc vis_aendt_cdc; format vis_astdt vis_aendt vis_stat_cdc vis_aendt_cdc yymmdd10.; 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. **; data nva_naat2 nva_naat_flags(keep = usubjid vax101dt vax102dt dthdt c19ilhfl_ vldrslfl vrblngfl crd1ngfl crd2ngfl pdp17fl_ pdp27fl_); 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'; c19ilhfl_ = c19ilhfl; if strip(avisit) = 'V1_DAY1_VAX1_L' 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) = 'V2_VAX2_L' then do; if . < adt <= vax102dt then vldrslfl = 'Y'; if vldrslfl = 'Y' and strip(put(stat,stat.)) = 'POS' and grp = 22 then 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') 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'; run; 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)); set nva_naat3; by usubjid vax101dt vax102dt avisitn avisit visitnum visit grp stat adt; if last.grp then keepflg = 1; output nva_naat4; if keepflg = 1 then do; if grp = 21 and strip(avisit) = 'V1_DAY1_VAX1_L' then output nva_naat4a; if grp = 22 and strip(avisit) = 'V1_DAY1_VAX1_L' then output nva_naat4b; if grp = 22 and strip(avisit) = 'V2_VAX2_L' then output nva_naat4c; if grp = 22 and strip(avisit) not in ('V1_DAY1_VAX1_L','V2_VAX2_L') then output nva_naat4d; if grp = 23 and strip(avisit) not in ('V1_DAY1_VAX1_L','V2_VAX2_L') then output nva_naat4e; 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 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); 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; 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 c19ilhfl 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; run; ** Determine NAAT unplanned result and derive case. **; 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 = .; aendt_pd_res_miss = .; cd_fst_pos_dt = .; astdt_cdc_res_miss = .; aendt_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'; 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 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.); 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.); 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; aendt_pd_res_miss = aendt; if (pd_fst_pos_dt = .) or (. < astdt < pd_fst_pos_dt) then do; pdrmufl_ = 'Y'; pdrmupfl_ = 'Y'; end; end; if strip(put(c19onst,stat.)) = 'POS' and pdrmupfl_ = 'Y' then do; if unblnddt = . then do; if . < astdt_pd_res_miss < pd_fst_pos_dt then pdrmupfl_ = 'N'; if pdrmupfl_ = 'Y' and astdt_pd_res_miss = . and . < aendt_pd_res_miss < pd_fst_pos_dt then pdrmupfl_ = 'N'; end; else do; if . < astdt_pd_res_miss < pd_fst_pos_dt < unblnddt then pdrmupfl_ = 'N'; if pdrmupfl_ = 'Y' and astdt_pd_res_miss = . and . < aendt_pd_res_miss < pd_fst_pos_dt < unblnddt then pdrmupfl_ = 'N'; end; end; 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; aendt_cdc_res_miss = aendt; 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' then do; if unblnddt = . then do; if . < astdt_cdc_res_miss < cd_fst_pos_dt then cdrmupfl_ = 'N'; if cdrmupfl_ = 'Y' and astdt_cdc_res_miss = . and . < aendt_cdc_res_miss < cd_fst_pos_dt then cdrmupfl_ = 'N'; end; else do; if . < astdt_cdc_res_miss < cd_fst_pos_dt < unblnddt then cdrmupfl_ = 'N'; if cdrmupfl_ = 'Y' and astdt_cdc_res_miss = . and . < aendt_cdc_res_miss < cd_fst_pos_dt < unblnddt then cdrmupfl_ = 'N'; end; end; 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 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'; 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_cdc = 'Y'; else ild1fl_cdc = 'N'; if . < vax101dt < sum(vax101dt,7) <= astdt then ild17fl_cdc = 'Y'; else ild17fl_cdc = 'N'; if (crd2ngfl = 'Y' and . < vax102dt = astdt) or (. < vax102dt < astdt) then ild2fl_cdc = 'Y'; else ild2fl_cdc = 'N'; if . < vax102dt < sum(vax102dt,7) <= astdt then ild27fl_cdc = 'Y'; else ild27fl_cdc = 'N'; if . < vax102dt < sum(vax102dt,14) <= astdt then ild214fl_cdc = 'Y'; else ild214fl_cdc = 'N'; if filocrfl_cdc_ = '' then do; filocrfl_cdc_ = 'Y'; filocrfl_cdc = 'Y'; end; end; if grp = 20.1 and sevconst = input(put('POS',$stat.), ?? best.) then do; if (vrblngfl = 'Y' and crd1ngfl = 'Y' and . < vax101dt = astdt) or (. < vax101dt < astdt) then ild1fl_sev = 'Y'; else ild1fl_sev = 'N'; if . < vax101dt < sum(vax101dt,7) <= astdt then ild17fl_sev = 'Y'; else ild17fl_sev = 'N'; if (crd2ngfl = 'Y' and . < vax102dt = astdt) or (. < vax102dt < astdt) then ild2fl_sev = 'Y'; else ild2fl_sev = 'N'; if . < vax102dt < sum(vax102dt,7) <= astdt then ild27fl_sev = 'Y'; else ild27fl_sev = 'N'; if . < vax102dt < sum(vax102dt,14) <= astdt then ild214fl_sev = 'Y'; else ild214fl_sev = 'N'; if filocrfl_sev_ = '' then do; filocrfl_sev_ = 'Y'; filocrfl_sev = 'Y'; end; end; if grp = 20.2 and cdcsonst = input(put('POS',$stat.), ?? best.) then do; if (vrblngfl = 'Y' and crd1ngfl = 'Y' and . < vax101dt = astdt) or (. < vax101dt < astdt) then ild1fl_sev_cdc = 'Y'; else ild1fl_sev_cdc = 'N'; if . < vax101dt < sum(vax101dt,7) <= astdt then ild17fl_sev_cdc = 'Y'; else ild17fl_sev_cdc = 'N'; if (crd2ngfl = 'Y' and . < vax102dt = astdt) or (. < vax102dt < astdt) then ild2fl_sev_cdc = 'Y'; else ild2fl_sev_cdc = 'N'; if . < vax102dt < sum(vax102dt,7) <= astdt then ild27fl_sev_cdc = 'Y'; else ild27fl_sev_cdc = 'N'; if . < vax102dt < sum(vax102dt,14) <= astdt then ild214fl_sev_cdc = 'Y'; else ild214fl_sev_cdc = 'N'; if filocrfl_sev_cdc_ = '' then do; filocrfl_sev_cdc_ = 'Y'; filocrfl_sev_cdc = 'Y'; end; end; if (strip(put(stat,stat.)) = ('POS') and strip(put(naat_unp,stat.)) ^= 'NEG') and stdy1 < 1 then do; if (vax101dt ^= . and naat_unp_dt ^= . and vax101dt <= naat_unp_dt) or naat_unp_dt = . or vunprfl = 'Y' then do; if grp = 1 then pdp1fl_ = 'N'; if grp = 2 then cdp1fl_ = 'N'; end; end; if (strip(put(stat,stat.)) = ('POS') and strip(put(naat_unp,stat.)) ^= 'NEG') and stdy1 < 8 then do; if (vax101dt ^= . and naat_unp_dt ^= . and vax101dt <= naat_unp_dt < sum(vax101dt,7)) or naat_unp_dt = . or vunprfl = 'Y' then do; if grp = 1 then do; pdp17fl_ = 'N'; pdp27fl_ = 'N'; end; if grp = 2 then do; cdp17fl_ = 'N'; cdp27fl_ = 'N'; end; end; end; if (strip(put(stat,stat.)) = ('POS') and strip(put(naat_unp,stat.)) ^= 'NEG') and stdy2 < 8 then do; if (vax101dt ^= . and vax102dt ^= . and naat_unp_dt ^= . and vax101dt <= naat_unp_dt < sum(vax102dt,7)) or naat_unp_dt = . or vunprfl = 'Y' then do; if grp = 1 then pdp27fl_ = 'N'; if grp = 2 then cdp27fl_ = 'N'; end; end; if (strip(put(stat,stat.)) = ('POS') and strip(put(naat_unp,stat.)) ^= 'NEG') and stdy2 < 15 then do; if (vax101dt ^= . and vax102dt ^= . and naat_unp_dt ^= . and vax101dt <= naat_unp_dt < sum(vax102dt,14)) or naat_unp_dt = . or vunprfl = 'Y' then do; if grp = 1 then pdp214fl_ = 'N'; if grp = 2 then cdp214fl_ = 'N'; end; end; if strip(put(naat_unp,stat.)) = 'POS' and vunprfl = 'Y' then do; if . < naat_unp_dt < vax101dt then do; pdp1fl_ = 'N'; end; if vax101dt ^= . and vax101dt <= naat_unp_dt < sum(vax101dt,7) then do; pdp17fl_ = 'N'; pdp27fl_ = 'N'; cdp17fl_ = 'N'; cdp27fl_ = 'N'; end; if vax101dt ^= . and vax102dt ^= . and vax101dt <= naat_unp_dt < sum(vax102dt,7) then do; pdp27fl_ = 'N'; cdp27fl_ = 'N'; end; if vax101dt ^= . and vax102dt ^= . and vax101dt <= naat_unp_dt < sum(vax102dt,14) then do; pdp214fl_ = 'N'; cdp214fl_ = 'N'; end; end; if strip(put(stat,stat.)) ^= 'POS' and ((strip(put(cnt_unp,stat.)) = 'POS') or (strip(put(cnt_unp,stat.)) = '' and strip(put(lcl_unp,stat.)) = 'POS')) then do; if strip(put(cnt_unp,stat.)) = 'POS' then do; tmp_unp = cnt_unp; tmp_unp_dt = cnt_unp_dt; end; else if strip(put(lcl_unp,stat.)) = 'POS' then do; tmp_unp = lcl_unp; tmp_unp_dt = lcl_unp_dt; end; if . < tmp_unp_dt < vax101dt then do; pdp1fl_ = 'N'; end; if vax101dt ^= . and vax101dt <= tmp_unp_dt < sum(vax101dt,7) then do; pdp17fl_ = 'N'; pdp27fl_ = 'N'; cdp17fl_ = 'N'; cdp27fl_ = 'N'; end; if vax101dt ^= . and vax102dt ^= . and vax101dt <= tmp_unp_dt < sum(vax102dt,7) then do; pdp27fl_ = 'N'; cdp27fl_ = 'N'; end; if vax101dt ^= . and vax102dt ^= . and vax101dt <= tmp_unp_dt < sum(vax102dt,14) then do; pdp214fl_ = 'N'; cdp214fl_ = 'N'; end; end; if aendt ^= . then last_vis_end_dt = aendt; output symp4; if last.usubjid then output symp_all_flags; format naat_unp_dt last_vis_end_dt pd_fst_pos_dt cd_fst_pos_dt astdt_pd_res_miss aendt_pd_res_miss astdt_cdc_res_miss aendt_cdc_res_miss last_vis_end_dt yymmdd10.; retain c19onst_ cdconst_ pdsymfl_ pdsdmfl_ cdcsymfl_ sevsymfl_ sevcdcfl_ pdrmufl_ pdrmupfl_ cdcrmufl_ cdrmupfl_ filocrfl_pd_ filocrfl_cdc_ filocrfl_sev_ filocrfl_sev_cdc_ pdp1fl_ pdp17fl_ pdp27fl_ pdp214fl_ cdp1fl_ cdp17fl_ cdp27fl_ cdp214fl_ pd_fst_pos_dt cd_fst_pos_dt astdt_pd_res_miss aendt_pd_res_miss astdt_cdc_res_miss aendt_cdc_res_miss last_vis_end_dt; run; ** Join all the flags with results and symptoms data. Generate cutoff dataset. **; data all_flags; merge nva_naat_flags(in = a) symp_all_flags(in = b); by usubjid; 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 = 1 then do; pdsymfl_ = 'N'; pdsdmfl_ = 'N'; cdcsymfl_ = 'N'; sevsymfl_ = 'N'; sevcdcfl_ = 'N'; pdrmufl_ = 'N'; pdrmupfl_ = 'N'; cdcrmufl_ = 'N'; cdrmupfl_ = 'N'; pdp1fl_ = pdp17fl_; pdp214fl_ = pdp27fl_; cdp1fl_ = pdp17fl_; cdp17fl_ = pdp17fl_; cdp27fl_ = pdp27fl_; cdp214fl_ = pdp27fl_; end; if mflg = 3 then do; vrblngfl = 'N'; crd1ngfl = 'N'; crd2ngfl = 'N'; end; rename c19ilhfl_ = c19ilhfl pdsymfl_ = pdsymfl pdsdmfl_ = pdsdmfl cdcsymfl_ = cdcsymfl sevsymfl_ = sevsymfl sevcdcfl_ = sevcdcfl pdrmufl_ = pdrmufl pdrmupfl_ = pdrmupfl cdcrmufl_ = cdcrmufl cdrmupfl_ = cdrmupfl pdp1fl_ = pdp1fl pdp17fl_ = pdp17fl pdp27fl_ = pdp27fl pdp214fl_ = pdp214fl cdp1fl_ = cdp1fl cdp17fl_ = cdp17fl cdp27fl_ = cdp27fl cdp214fl_ = cdp214fl; run; data death_all_flags; merge death(in = a drop = astdt stat srtdt) all_flags(in = b drop = mflg); by usubjid; if a; dthdt = adt; avisitn = .; avisit = ''; grp = .; run; proc sort data = death_all_flags; by usubjid vax101dt vax102dt avisitn avisit grp; run; proc sql; ** Merge flags with NVA, NAAT results. **; create table nva_naat5 as select * from (select recseq, usubjid, vax101dt, vax102dt, visitnum, visit, avisitn, avisit, paramn, paramcd, param, parcat1, aval, avalc, grp, adt, stat, dthdt, unblnddt from nva_naat1) left join (select cncrslfl from nva_naat4 as b where keepflg = 1) on strip(recseq) = strip(b.recseq); create table nva_naat6 as select * from nva_naat5 left join (select vrblngfl, crd1ngfl, crd2ngfl, c19ilhfl, pdsymfl, pdsdmfl, cdcsymfl, sevsymfl, sevcdcfl, pdrmufl, pdrmupfl, cdcrmufl, cdrmupfl, pdp1fl, pdp17fl, pdp27fl, pdp214fl, cdp1fl, cdp17fl, cdp27fl, cdp214fl from all_flags as b) on usubjid = b.usubjid order by usubjid, vax101dt, vax102dt, avisitn, avisit, grp; ** Merge flags with symptoms data. **; create table symp5(drop = pdp17fl_tmp pdp27fl_tmp c19onst_ pdsymfl_ pdsdmfl_ cdcsymfl_ sevsymfl_ sevcdcfl_ pdrmufl_ pdrmupfl_ cdcrmufl_ cdrmupfl_ pdp1fl_ pdp17fl_ pdp27fl_ pdp214fl_ cdp1fl_ cdp17fl_ cdp27fl_ cdp214fl_ pd_fst_pos_dt cd_fst_pos_dt) as select * from symp4 left join (select pdsymfl, pdsdmfl, cdcsymfl, sevsymfl, sevcdcfl, pdrmufl, pdrmupfl, cdcrmufl, cdrmupfl, pdp1fl, pdp17fl, pdp27fl, pdp214fl, cdp1fl, cdp17fl, cdp27fl, cdp214fl from all_flags as b) on usubjid = b.usubjid order by usubjid, vax101dt, vax102dt, avisitn, avisit, grp, astdt; create table cutoff as select usubjid, grp, stat, astdt from symp5 where grp = 1 and stat = 4 and pdp27fl = 'Y' and c19onst = 4 and ild27fl_pd = 'Y' and filocrfl_pd = 'Y' order by astdt, usubjid; quit; ** Determine cutoff date. **; data _null_; set cutoff end = eof; by astdt usubjid; if eof then put 'NOTE: Current Case Count is : ' _n_; if _n_ = &cutoff_case_count then call symput('data_cutoff_date',strip(put(astdt,yymmdd10.))); if eof and "&data_cutoff_date" ^= '' then call symput('data_cutoff_date',"&data_cutoff_date"); run; %put NOTE: Cutoff Date is set as: &data_cutoff_date; ** Combine all data together and generate PARAMN, PARAMCD and PARAM variables. **; data adc19ef_1; set nva_naat6 symp5(drop = nva nva_dt cnt_1 cnt_1dt cnt_2 cnt_2dt cnt_unp cnt_unp_dt c_vldrslfl lcl_unp lcl_unp_dt l_vldrslfl) death_all_flags; by usubjid vax101dt vax102dt avisitn avisit grp; if dthdt ^= . then dthfl = 'Y'; if paramn in (95,96) then output; if grp = 1 then do; paramn = 101; paramcd = 'PRPDSAD'; param = 'PRESENCE OF PROTOCOL DEFINED SYMPTOMS AFTER DOSE'; end; if grp = 2 then do; paramn = 102; paramcd = 'PRCDCSAD'; param = 'PRESENCE OF CDC DEFINED SYMPTOMS AFTER DOSE'; end; if grp = 3 then do; paramn = 103; paramcd = 'SEVCVS'; param = 'SEVERE COVID-19 SYMPTOMS - VITAL SIGNS'; parcat1 = 'GENERAL VITAL SIGNS & OXYGENATION PARAMETERS'; adt = astdt; astdt = .; aendt = .; end; if grp = 4 then do; paramn = 104; paramcd = 'SEVCRF'; param = 'SEVERE COVID-19 SYMPTOMS - RESPIRATORY FAILURE'; end; if grp = 5 then do; paramn = 105; paramcd = 'SEVCVSPR'; param = 'SEVERE COVID-19 SYMPTOMS - USE OF VASOPRESSORS'; end; if grp = 6 then do; paramn = 106; paramcd = 'SEVCRHN'; param = 'SEVERE COVID-19 SYMPTOMS - SIGNIFICANT ACUTE RENAL, HEPATIC, OR NEUROLOGIC DYSFUNCTION'; end; if grp = 7 then do; paramn = 91; paramcd = 'HCUICU'; param = 'SUBJECT IN ICU DUE TO POTENTIAL COVID-19 ILLNESS'; parcat1 = 'HOSPITALIZATION STATUS'; end; if grp = 10 then do; paramn = 100; paramcd = 'DTHODC19'; param = 'DEATH OCCURRED DUE TO COVID-19 ILLNESS?'; parcat1 = 'DEATH STATUS'; adt = astdt; astdt = .; aendt = .; if avisit in ('V1_DAY1_VAX1_L','V2_VAX2_L') then do; avisitn = .; avisit = ''; end; end; if grp = 11 then do; paramn = 92; paramcd = 'HCUHSP'; param = 'HOSPITALIZED DUE TO COVID-19 ILLNESS?'; parcat1 = 'HOSPITALIZATION STATUS'; end; if grp = 20.1 then do; paramn = 107; paramcd = 'PRSVCSAD'; param = 'PRESENCE OF PROTOCOL DEFINED SEVERE COVID-19 SYMPTOMS AFTER DOSE'; parcat1 = 'SEVERE COVID-19 SYMPTOMS'; if dthdt ^= . then aendt = dthdt; if avisit in ('V1_DAY1_VAX1_L','V2_VAX2_L') then do; avisitn = .; avisit = ''; end; end; if grp = 20.2 then do; paramn = 108; paramcd = 'PRSCDCAD'; param = 'PRESENCE OF CDC DEFINED SEVERE COVID-19 SYMPTOMS AFTER DOSE'; parcat1 = 'SEVERE COVID-19 SYMPTOMS'; if dthdt ^= . then aendt = dthdt; if avisit in ('V1_DAY1_VAX1_L','V2_VAX2_L') then do; avisitn = .; avisit = ''; end; end; if 1 <= grp < 21 then do; if stat = 0 then avalc = ''; if stat = 2 then avalc = 'N'; if stat = 4 then avalc = 'Y'; end; if grp in (1,2,3,4,5,6,7,10,11,20.1,20.2,21,22,23) then output; if grp = 1 then do; paramn = 120; paramcd = 'C19ONST'; param = 'PROTOCOL DEFINED COVID-19 ILLNESS ONSET'; parcat1 = 'ILLNESS ONSET'; adt = astdt; astdt = .; aendt = .; stat = c19onst; avalc = strip(put(c19onst,stat.)); ild1fl = ild1fl_pd; ild17fl = ild17fl_pd; ild2fl = ild2fl_pd; ild27fl = ild27fl_pd; ild214fl = ild214fl_pd; filocrfl = filocrfl_pd; output; end; if grp = 2 then do; paramn = 125; paramcd = 'CDCONST'; param = 'CDC DEFINED COVID-19 ILLNESS ONSET'; parcat1 = 'ILLNESS ONSET'; adt = astdt; astdt = .; aendt = .; stat = cdconst; avalc = strip(put(cdconst,stat.)); ild1fl = ild1fl_cdc; ild17fl = ild17fl_cdc; ild2fl = ild2fl_cdc; ild27fl = ild27fl_cdc; ild214fl = ild214fl_cdc; filocrfl = filocrfl_cdc; output; end; if grp = 20.1 then do; paramn = 130; paramcd = 'SEVCONST'; param = 'PROTOCOL DEFINED SEVERE COVID-19 ILLNESS ONSET'; parcat1 = 'ILLNESS ONSET'; adt = astdt; astdt = .; aendt = .; stat = sevconst; avalc = strip(put(sevconst,stat.)); ild1fl = ild1fl_sev; ild17fl = ild17fl_sev; ild2fl = ild2fl_sev; ild27fl = ild27fl_sev; ild214fl = ild214fl_sev; filocrfl = filocrfl_sev; if avisit in ('V1_DAY1_VAX1_L','V2_VAX2_L') then do; avisitn = .; avisit = ''; end; output; end; if grp = 20.2 then do; paramn = 135; paramcd = 'CDCSONST'; param = 'CDC DEFINED SEVERE COVID-19 ILLNESS ONSET'; parcat1 = 'ILLNESS ONSET'; adt = astdt; astdt = .; aendt = .; stat = cdcsonst; avalc = strip(put(cdcsonst,stat.)); ild1fl = ild1fl_sev_cdc; ild17fl = ild17fl_sev_cdc; ild2fl = ild2fl_sev_cdc; ild27fl = ild27fl_sev_cdc; ild214fl = ild214fl_sev_cdc; filocrfl = filocrfl_sev_cdc; if avisit in ('V1_DAY1_VAX1_L','V2_VAX2_L') then do; avisitn = .; avisit = ''; end; output; end; if first.avisitn and strip(avisit) not in ('V1_DAY1_VAX1_L','V2_VAX2_L') and (grp in (1,2) or naat_rslt_flg = 1) then do; paramn = 110; paramcd = 'NAATRAD'; param = 'COVID-19 NAAT RESULT AFTER DOSE'; parcat1 = 'CENTRAL/LOCAL NAAT RESULTS'; adt = naat_unp_dt; astdt = .; aendt = .; grp = .; avalc = strip(put(naat_unp,stat.)); if visitnum ^= visitnum_ and visit ^= visit_ and visitnum_ ^= . and visit_ ^= '' then do; visitnum = visitnum_; visit = visit_; end; output; end; run; data adc19ef_2; merge adc19ef_1(in = a drop = dthdt dthfl unblnddt) datvprot.adsl(in = b keep = studyid usubjid siteid subjid brthdt agegr1n agegr1 sex race ethnic armcd arm actarmcd actarm randdt trtsdt trtedt vax101dt vax102dt dvstdt dthdt eotdcdt eotdcrs eosdcdt eosdcrs randfl evaleffl aai1effl aai2effl dthfl phasen phase unblnddt); by usubjid; dcodt = input("&data_cutoff_date",?? yymmdd10.); 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 then do; vrblngfl = 'U'; crd1ngfl = 'U'; crd2ngfl = 'U'; pdsymfl = 'N'; pdsdmfl = 'N'; cdcsymfl = 'N'; sevsymfl = 'N'; sevcdcfl = 'N'; pdrmufl = 'N'; pdrmupfl = 'N'; cdcrmufl = 'N'; cdrmupfl = 'N'; pdp1fl = 'N'; pdp17fl = 'N'; pdp27fl = 'N'; pdp214fl = 'N'; cdp1fl = 'N'; cdp17fl = 'N'; cdp27fl = 'N'; cdp214fl = 'N'; end; if vrblngfl = 'U' then vrblngfl = ''; if crd1ngfl = 'U' then crd1ngfl = ''; if crd2ngfl = 'U' then crd2ngfl = ''; if phasen = 1 then delete; format dcodt yymmdd10. ; run; ** Derive surveillance time. **; data adc19ef_3; set adc19ef_2; by usubjid; if paramcd ^= '' then output; if first.usubjid then do; pd_srvlendt = .; cdc_srvlendt = .; sev_srvlendt = .; sev_cdc_srvlendt = .; end; if strip(paramcd) = 'C19ONST' and filocrfl = 'Y' then pd_srvlendt = adt; if strip(paramcd) = 'CDCONST' and filocrfl = 'Y' then cdc_srvlendt = adt; if strip(paramcd) = 'SEVCONST' and filocrfl = 'Y' then sev_srvlendt = adt; if strip(paramcd) = 'CDCSONST' and filocrfl = 'Y' then sev_cdc_srvlendt = adt; if eosdcdt ^= . and eosdcrs ^= '' then withdraw_dt = eosdcdt; if nmiss(dcodt,withdraw_dt,dthdt,unblnddt,compldt) <= 4 then srvlendt = min(dcodt,withdraw_dt,dthdt,unblnddt,compldt); else srvlendt = .; if last.usubjid then do; cncrslfl = ''; avalc = ''; visitnum = .; visit = ''; avisitn = .; avisit = ''; adt = .; parcat1 = 'SURVEILLANCE TIME'; aval = 0; astdt = .; aendt = .; paramn = 141; paramcd = "ST1PD"; param = "SUBJECT'S SURVEILLANCE TIME AFTER DOSE 1 FOR PROTOCOL DEFINED COVID19 SYMPTOMS"; if vax101dt ^= . then do; astdt = sum(vax101dt,0); if "" = "AAI" then do; aendt = min(srvlendt,pd_srvlendt); end; else do; aendt = min(srvlendt,pd_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 142; paramcd = "ST17PD"; param = "SUBJECT'S SURVEILLANCE TIME 7 DAYS AFTER DOSE 1 FOR PROTOCOL DEFINED COVID19 SYMPTOMS"; if vax101dt ^= . then do; astdt = sum(vax101dt,7); if "" = "AAI" then do; aendt = min(srvlendt,pd_srvlendt); end; else do; aendt = min(srvlendt,pd_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 143; paramcd = "ST2PD"; param = "SUBJECT'S SURVEILLANCE TIME AFTER DOSE 2 FOR PROTOCOL DEFINED COVID19 SYMPTOMS"; if vax102dt ^= . then do; astdt = sum(vax102dt,0); if "" = "AAI" then do; aendt = min(srvlendt,pd_srvlendt); end; else do; aendt = min(srvlendt,pd_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 144; paramcd = "ST27PD"; param = "SUBJECT'S SURVEILLANCE TIME 7 DAYS AFTER DOSE 2 FOR PROTOCOL DEFINED COVID19 SYMPTOMS"; if vax102dt ^= . then do; astdt = sum(vax102dt,7); if "" = "AAI" then do; aendt = min(srvlendt,pd_srvlendt); end; else do; aendt = min(srvlendt,pd_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 145; paramcd = "ST214PD"; param = "SUBJECT'S SURVEILLANCE TIME 14 DAYS AFTER DOSE 2 FOR PROTOCOL DEFINED COVID19 SYMPTOMS"; if vax102dt ^= . then do; astdt = sum(vax102dt,14); if "" = "AAI" then do; aendt = min(srvlendt,pd_srvlendt); end; else do; aendt = min(srvlendt,pd_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 151; paramcd = "ST1CD"; param = "SUBJECT'S SURVEILLANCE TIME AFTER DOSE 1 FOR CDC DEFINED COVID19 SYMPTOMS"; if vax101dt ^= . then do; astdt = sum(vax101dt,0); if "" = "AAI" then do; aendt = min(srvlendt,cdc_srvlendt); end; else do; aendt = min(srvlendt,cdc_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 152; paramcd = "ST17CD"; param = "SUBJECT'S SURVEILLANCE TIME 7 DAYS AFTER DOSE 1 FOR CDC DEFINED COVID19 SYMPTOMS"; if vax101dt ^= . then do; astdt = sum(vax101dt,7); if "" = "AAI" then do; aendt = min(srvlendt,cdc_srvlendt); end; else do; aendt = min(srvlendt,cdc_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 153; paramcd = "ST2CD"; param = "SUBJECT'S SURVEILLANCE TIME AFTER DOSE 2 FOR CDC DEFINED COVID19 SYMPTOMS"; if vax102dt ^= . then do; astdt = sum(vax102dt,0); if "" = "AAI" then do; aendt = min(srvlendt,cdc_srvlendt); end; else do; aendt = min(srvlendt,cdc_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 154; paramcd = "ST27CD"; param = "SUBJECT'S SURVEILLANCE TIME 7 DAYS AFTER DOSE 2 FOR CDC DEFINED COVID19 SYMPTOMS"; if vax102dt ^= . then do; astdt = sum(vax102dt,7); if "" = "AAI" then do; aendt = min(srvlendt,cdc_srvlendt); end; else do; aendt = min(srvlendt,cdc_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 155; paramcd = "ST214CD"; param = "SUBJECT'S SURVEILLANCE TIME 14 DAYS AFTER DOSE 2 FOR CDC DEFINED COVID19 SYMPTOMS"; if vax102dt ^= . then do; astdt = sum(vax102dt,14); if "" = "AAI" then do; aendt = min(srvlendt,cdc_srvlendt); end; else do; aendt = min(srvlendt,cdc_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 161; paramcd = "ST1SE"; param = "SUBJECT'S SURVEILLANCE TIME AFTER DOSE 1 FOR PROTOCOL DEFINED SEVERE COVID19 SYMPTOMS"; if vax101dt ^= . then do; astdt = sum(vax101dt,0); if "" = "AAI" then do; aendt = min(srvlendt,sev_srvlendt); end; else do; aendt = min(srvlendt,sev_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 162; paramcd = "ST17SE"; param = "SUBJECT'S SURVEILLANCE TIME 7 DAYS AFTER DOSE 1 FOR PROTOCOL DEFINED SEVERE COVID19 SYMPTOMS"; if vax101dt ^= . then do; astdt = sum(vax101dt,7); if "" = "AAI" then do; aendt = min(srvlendt,sev_srvlendt); end; else do; aendt = min(srvlendt,sev_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 163; paramcd = "ST2SE"; param = "SUBJECT'S SURVEILLANCE TIME AFTER DOSE 2 FOR PROTOCOL DEFINED SEVERE COVID19 SYMPTOMS"; if vax102dt ^= . then do; astdt = sum(vax102dt,0); if "" = "AAI" then do; aendt = min(srvlendt,sev_srvlendt); end; else do; aendt = min(srvlendt,sev_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 164; paramcd = "ST27SE"; param = "SUBJECT'S SURVEILLANCE TIME 7 DAYS AFTER DOSE 2 FOR PROTOCOL DEFINED SEVERE COVID19 SYMPTOMS"; if vax102dt ^= . then do; astdt = sum(vax102dt,7); if "" = "AAI" then do; aendt = min(srvlendt,sev_srvlendt); end; else do; aendt = min(srvlendt,sev_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 165; paramcd = "ST214SE"; param = "SUBJECT'S SURVEILLANCE TIME 14 DAYS AFTER DOSE 2 FOR PROTOCOL DEFINED SEVERE COVID19 SYMPTOMS"; if vax102dt ^= . then do; astdt = sum(vax102dt,14); if "" = "AAI" then do; aendt = min(srvlendt,sev_srvlendt); end; else do; aendt = min(srvlendt,sev_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 171; paramcd = "STC1SE"; param = "SUBJECT'S SURVEILLANCE TIME AFTER DOSE 1 FOR CDC DEFINED SEVERE COVID19 SYMPTOMS"; if vax101dt ^= . then do; astdt = sum(vax101dt,0); if "" = "AAI" then do; aendt = min(srvlendt,sev_cdc_srvlendt); end; else do; aendt = min(srvlendt,sev_cdc_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 172; paramcd = "STC17SE"; param = "SUBJECT'S SURVEILLANCE TIME 7 DAYS AFTER DOSE 1 FOR CDC DEFINED SEVERE COVID19 SYMPTOMS"; if vax101dt ^= . then do; astdt = sum(vax101dt,7); if "" = "AAI" then do; aendt = min(srvlendt,sev_cdc_srvlendt); end; else do; aendt = min(srvlendt,sev_cdc_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 173; paramcd = "STC2SE"; param = "SUBJECT'S SURVEILLANCE TIME AFTER DOSE 2 FOR CDC DEFINED SEVERE COVID19 SYMPTOMS"; if vax102dt ^= . then do; astdt = sum(vax102dt,0); if "" = "AAI" then do; aendt = min(srvlendt,sev_cdc_srvlendt); end; else do; aendt = min(srvlendt,sev_cdc_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 174; paramcd = "STC27SE"; param = "SUBJECT'S SURVEILLANCE TIME 7 DAYS AFTER DOSE 2 FOR CDC DEFINED SEVERE COVID19 SYMPTOMS"; if vax102dt ^= . then do; astdt = sum(vax102dt,7); if "" = "AAI" then do; aendt = min(srvlendt,sev_cdc_srvlendt); end; else do; aendt = min(srvlendt,sev_cdc_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 175; paramcd = "STC214SE"; param = "SUBJECT'S SURVEILLANCE TIME 14 DAYS AFTER DOSE 2 FOR CDC DEFINED SEVERE COVID19 SYMPTOMS"; if vax102dt ^= . then do; astdt = sum(vax102dt,14); if "" = "AAI" then do; aendt = min(srvlendt,sev_cdc_srvlendt); end; else do; aendt = min(srvlendt,sev_cdc_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 201; paramcd = "ST1PDA"; param = "SUBJECT'S SURVEILLANCE TIME AFTER DOSE 1 FOR PROTOCOL DEFINED COVID19 SYMPTOMS - ALL AVAILABLE"; if vax101dt ^= . then do; astdt = sum(vax101dt,0); if "AAI" = "AAI" then do; aendt = min(srvlendt,pd_srvlendt); end; else do; aendt = min(srvlendt,pd_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 202; paramcd = "ST17PDA"; param = "SUBJECT'S SURVEILLANCE TIME 7 DAYS AFTER DOSE 1 FOR PROTOCOL DEFINED COVID19 SYMPTOMS - ALL AVAILABLE"; if vax101dt ^= . then do; astdt = sum(vax101dt,7); if "AAI" = "AAI" then do; aendt = min(srvlendt,pd_srvlendt); end; else do; aendt = min(srvlendt,pd_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 203; paramcd = "ST2PDA"; param = "SUBJECT'S SURVEILLANCE TIME AFTER DOSE 2 FOR PROTOCOL DEFINED COVID19 SYMPTOMS - ALL AVAILABLE"; if vax102dt ^= . then do; astdt = sum(vax102dt,0); if "AAI" = "AAI" then do; aendt = min(srvlendt,pd_srvlendt); end; else do; aendt = min(srvlendt,pd_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 204; paramcd = "ST27PDA"; param = "SUBJECT'S SURVEILLANCE TIME 7 DAYS AFTER DOSE 2 FOR PROTOCOL DEFINED COVID19 SYMPTOMS - ALL AVAILABLE"; if vax102dt ^= . then do; astdt = sum(vax102dt,7); if "AAI" = "AAI" then do; aendt = min(srvlendt,pd_srvlendt); end; else do; aendt = min(srvlendt,pd_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 205; paramcd = "ST214PDA"; param = "SUBJECT'S SURVEILLANCE TIME 14 DAYS AFTER DOSE 2 FOR PROTOCOL DEFINED COVID19 SYMPTOMS - ALL AVAILABLE"; if vax102dt ^= . then do; astdt = sum(vax102dt,14); if "AAI" = "AAI" then do; aendt = min(srvlendt,pd_srvlendt); end; else do; aendt = min(srvlendt,pd_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 211; paramcd = "ST1CDA"; param = "SUBJECT'S SURVEILLANCE TIME AFTER DOSE 1 FOR CDC DEFINED COVID19 SYMPTOMS - ALL AVAILABLE"; if vax101dt ^= . then do; astdt = sum(vax101dt,0); if "AAI" = "AAI" then do; aendt = min(srvlendt,cdc_srvlendt); end; else do; aendt = min(srvlendt,cdc_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 212; paramcd = "ST17CDA"; param = "SUBJECT'S SURVEILLANCE TIME 7 DAYS AFTER DOSE 1 FOR CDC DEFINED COVID19 SYMPTOMS - ALL AVAILABLE"; if vax101dt ^= . then do; astdt = sum(vax101dt,7); if "AAI" = "AAI" then do; aendt = min(srvlendt,cdc_srvlendt); end; else do; aendt = min(srvlendt,cdc_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 213; paramcd = "ST2CDA"; param = "SUBJECT'S SURVEILLANCE TIME AFTER DOSE 2 FOR CDC DEFINED COVID19 SYMPTOMS - ALL AVAILABLE"; if vax102dt ^= . then do; astdt = sum(vax102dt,0); if "AAI" = "AAI" then do; aendt = min(srvlendt,cdc_srvlendt); end; else do; aendt = min(srvlendt,cdc_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 214; paramcd = "ST27CDA"; param = "SUBJECT'S SURVEILLANCE TIME 7 DAYS AFTER DOSE 2 FOR CDC DEFINED COVID19 SYMPTOMS - ALL AVAILABLE"; if vax102dt ^= . then do; astdt = sum(vax102dt,7); if "AAI" = "AAI" then do; aendt = min(srvlendt,cdc_srvlendt); end; else do; aendt = min(srvlendt,cdc_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 215; paramcd = "ST214CDA"; param = "SUBJECT'S SURVEILLANCE TIME 14 DAYS AFTER DOSE 2 FOR CDC DEFINED COVID19 SYMPTOMS - ALL AVAILABLE"; if vax102dt ^= . then do; astdt = sum(vax102dt,14); if "AAI" = "AAI" then do; aendt = min(srvlendt,cdc_srvlendt); end; else do; aendt = min(srvlendt,cdc_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 221; paramcd = "ST1SEA"; param = "SUBJECT'S SURVEILLANCE TIME AFTER DOSE 1 FOR PROTOCOL DEFINED SEVERE COVID19 SYMPTOMS - ALL AVAILABLE"; if vax101dt ^= . then do; astdt = sum(vax101dt,0); if "AAI" = "AAI" then do; aendt = min(srvlendt,sev_srvlendt); end; else do; aendt = min(srvlendt,sev_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 222; paramcd = "ST17SEA"; param = "SUBJECT'S SURVEILLANCE TIME 7 DAYS AFTER DOSE 1 FOR PROTOCOL DEFINED SEVERE COVID19 SYMPTOMS - ALL AVAILABLE"; if vax101dt ^= . then do; astdt = sum(vax101dt,7); if "AAI" = "AAI" then do; aendt = min(srvlendt,sev_srvlendt); end; else do; aendt = min(srvlendt,sev_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 223; paramcd = "ST2SEA"; param = "SUBJECT'S SURVEILLANCE TIME AFTER DOSE 2 FOR PROTOCOL DEFINED SEVERE COVID19 SYMPTOMS - ALL AVAILABLE"; if vax102dt ^= . then do; astdt = sum(vax102dt,0); if "AAI" = "AAI" then do; aendt = min(srvlendt,sev_srvlendt); end; else do; aendt = min(srvlendt,sev_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 224; paramcd = "ST27SEA"; param = "SUBJECT'S SURVEILLANCE TIME 7 DAYS AFTER DOSE 2 FOR PROTOCOL DEFINED SEVERE COVID19 SYMPTOMS - ALL AVAILABLE"; if vax102dt ^= . then do; astdt = sum(vax102dt,7); if "AAI" = "AAI" then do; aendt = min(srvlendt,sev_srvlendt); end; else do; aendt = min(srvlendt,sev_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 225; paramcd = "ST214SEA"; param = "SUBJECT'S SURVEILLANCE TIME 14 DAYS AFTER DOSE 2 FOR PROTOCOL DEFINED SEVERE COVID19 SYMPTOMS - ALL AVAILABLE"; if vax102dt ^= . then do; astdt = sum(vax102dt,14); if "AAI" = "AAI" then do; aendt = min(srvlendt,sev_srvlendt); end; else do; aendt = min(srvlendt,sev_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 231; paramcd = "STC1SA"; param = "SUBJECT'S SURVEILLANCE TIME AFTER DOSE 1 FOR CDC DEFINED SEVERE COVID19 SYMPTOMS - ALL AVAILABLE"; if vax101dt ^= . then do; astdt = sum(vax101dt,0); if "AAI" = "AAI" then do; aendt = min(srvlendt,sev_cdc_srvlendt); end; else do; aendt = min(srvlendt,sev_cdc_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 232; paramcd = "STC17SA"; param = "SUBJECT'S SURVEILLANCE TIME 7 DAYS AFTER DOSE 1 FOR CDC DEFINED SEVERE COVID19 SYMPTOMS - ALL AVAILABLE"; if vax101dt ^= . then do; astdt = sum(vax101dt,7); if "AAI" = "AAI" then do; aendt = min(srvlendt,sev_cdc_srvlendt); end; else do; aendt = min(srvlendt,sev_cdc_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 233; paramcd = "STC2SA"; param = "SUBJECT'S SURVEILLANCE TIME AFTER DOSE 2 FOR CDC DEFINED SEVERE COVID19 SYMPTOMS - ALL AVAILABLE"; if vax102dt ^= . then do; astdt = sum(vax102dt,0); if "AAI" = "AAI" then do; aendt = min(srvlendt,sev_cdc_srvlendt); end; else do; aendt = min(srvlendt,sev_cdc_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 234; paramcd = "STC27SA"; param = "SUBJECT'S SURVEILLANCE TIME 7 DAYS AFTER DOSE 2 FOR CDC DEFINED SEVERE COVID19 SYMPTOMS - ALL AVAILABLE"; if vax102dt ^= . then do; astdt = sum(vax102dt,7); if "AAI" = "AAI" then do; aendt = min(srvlendt,sev_cdc_srvlendt); end; else do; aendt = min(srvlendt,sev_cdc_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 235; paramcd = "STC214SA"; param = "SUBJECT'S SURVEILLANCE TIME 14 DAYS AFTER DOSE 2 FOR CDC DEFINED SEVERE COVID19 SYMPTOMS - ALL AVAILABLE"; if vax102dt ^= . then do; astdt = sum(vax102dt,14); if "AAI" = "AAI" then do; aendt = min(srvlendt,sev_cdc_srvlendt); end; else do; aendt = min(srvlendt,sev_cdc_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 301; paramcd = "ST1PDX"; param = "SUBJECT'S SURVEILLANCE TIME AFTER DOSE 1 FOR PROTOCOL DEFINED COVID19 SYMPTOMS - CROSSOVER"; if vax101dt ^= . then do; astdt = sum(vax101dt,0); if "AAI" = "AAI" then do; aendt = min(srvlendt,pd_srvlendt); end; else do; aendt = min(srvlendt,pd_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; aval = 0; astdt = .; aendt = .; paramn = 331; paramcd = "STC1SX"; param = "SUBJECT'S SURVEILLANCE TIME AFTER DOSE 1 FOR CDC DEFINED SEVERE COVID19 SYMPTOMS - CROSSOVER"; if vax101dt ^= . then do; astdt = sum(vax101dt,0); if "AAI" = "AAI" then do; aendt = min(srvlendt,sev_cdc_srvlendt); end; else do; aendt = min(srvlendt,sev_cdc_srvlendt,dvstdt); end; if nmiss(astdt,aendt) = 0 then aval = (aendt - astdt) + 1; output; end; ; end; format dcodt date9. srvlendt pd_srvlendt cdc_srvlendt sev_srvlendt sev_cdc_srvlendt yymmdd10.; retain pd_srvlendt cdc_srvlendt sev_srvlendt sev_cdc_srvlendt; run; data adc19ef_4; set adc19ef_3; by usubjid; if paramn > 140 and aval <= -1 then aval = 0; if strip(avalc) = '.' then avalc = ''; nmpdocfl = ''; if strip(paramcd) in ('C19ONST','CDCONST','SEVCONST','CDCSONST') then do; if dvstdt = . then nmpdocfl = 'Y'; if . < adt < dvstdt then nmpdocfl = 'Y'; end; else call missing(ild1fl,ild17fl,ild2fl,ild27fl,ild214fl,filocrfl); call missing(ady,astdy,aendy); if trtsdt ^= . then do; if adt ^= . then do; ady = adt - trtsdt; if adt >= trtsdt then ady = ady + 1; end; if astdt ^= . then do; astdy = astdt - trtsdt; if astdt >= trtsdt then astdy = astdy + 1; end; if aendt ^= . then do; aendy = aendt - trtsdt; if aendt >= trtsdt then aendy = aendy + 1; end; end; run; ******************************************************************************************; * Output datasets *; ******************************************************************************************; data adc19ef; retain studyid usubjid siteid subjid brthdt agegr1n agegr1 sex race ethnic armcd arm actarmcd actarm paramn paramcd param parcat1 aval avalc visitnum visit avisitn avisit adt ady astdt astdy aendt aendy dcodt randdt trtsdt trtedt vax101dt vax102dt dvstdt unblnddt dthdt eotdcdt eosdcdt randfl evaleffl aai1effl aai2effl dthfl c19ilhfl cncrslfl vrblngfl crd1ngfl crd2ngfl pdsymfl pdsdmfl cdcsymfl sevsymfl sevcdcfl ild1fl ild17fl ild2fl ild27fl ild214fl filocrfl pdrmufl pdrmupfl cdcrmufl cdrmupfl pdp1fl pdp17fl pdp27fl pdp214fl cdp1fl cdp17fl cdp27fl cdp214fl nmpdocfl; set adc19ef_4; by usubjid; keep studyid usubjid siteid subjid brthdt agegr1n agegr1 sex race ethnic armcd arm actarmcd actarm paramn paramcd param parcat1 aval avalc visitnum visit avisitn avisit adt ady astdt astdy aendt aendy dcodt randdt trtsdt trtedt vax101dt vax102dt dvstdt unblnddt dthdt eotdcdt eosdcdt randfl evaleffl aai1effl aai2effl dthfl c19ilhfl cncrslfl vrblngfl crd1ngfl crd2ngfl pdsymfl pdsdmfl cdcsymfl sevsymfl sevcdcfl ild1fl ild17fl ild2fl ild27fl ild214fl filocrfl pdrmufl pdrmupfl cdcrmufl cdrmupfl pdp1fl pdp17fl pdp27fl pdp214fl cdp1fl cdp17fl cdp27fl cdp214fl nmpdocfl; label dcodt = 'Data Cutoff Date' dthdt = 'Date of Death' aval = 'Analysis Value' avalc = 'Analysis Value (C)' adt = 'Analysis Date' ady = 'Analysis Relative Day' astdt = 'Analysis Start Date' astdy = 'Analysis Start Relative Day' aendt = 'Analysis End Date' aendy = 'Analysis End Relative Day' cncrslfl = 'Consider Result for Analysis Flag' vrblngfl = 'NVA Baseline Result Negative Flag' crd1ngfl = 'NAAT Result At Dose 1 Negative Flag' crd2ngfl = 'NAAT Result At Dose 2 Negative Flag' pdsymfl = 'Protocol Defined SYMP Present Flag' pdsdmfl = 'Protocol Defined SYMP Date Missing Flag' cdcsymfl = 'CDC Defined SYMP Present Flag' sevsymfl = 'Severe Covid PD SYMP Present Flag' sevcdcfl = 'Severe Covid CDC SYMP Present Flag' ild1fl = 'Illness Occur After Dose 1 Flag' ild17fl = 'Illness Occur 7 Days After Dose 1 Flag' ild2fl = 'Illness Occur After Dose 2 Flag' ild27fl = 'Illness Occur 7 Days After Dose 2 Flag' ild214fl = 'Illness Occur 14 Days After Dose 2 Flag' filocrfl = 'First Illness Occurrence Flag' pdrmufl = 'PD SYMP Result Missing or Unknown Flag' pdrmupfl = 'PD SYMP Rslt Miss/UNK With POS Rslt Flag' cdcrmufl = 'CDC SYMP Result Missing or Unknown Flag' cdrmupfl = 'CD SYMP Rslt Miss/UNK With POS Rslt Flag' pdp1fl = 'VE Prot Def Pop Incl Post D1 Flag' pdp17fl = 'VE Prot Def Pop Incl 7D Post D1 Flag' pdp27fl = 'VE Prot Def Pop Incl 7D Post D2 Flag' pdp214fl = 'VE Prot Def Pop Incl 14D Post D2 Flag' cdP1fl = 'VE CDC Def Pop Incl Post Dose 1 Flag' cdP17fl = 'VE CDC Def Pop Incl 7D Post Dose 1 Flag' cdp27fl = 'VE CDC Def Pop Incl 7D Post Dose 2 Flag' cdp214fl = 'VE CDC Def Pop Incl 14D Post Dose 2 Flag' nmpdocfl = 'No Major Protocol Deviation Occur Flag' ; format adt astdt aendt dcodt dthdt vax101dt vax102dt date9.; run; proc sort data = adc19ef out = datvprot.adc19ef(label = "Covid-19 Efficacy Analysis"); by studyid usubjid descending avisitn paramn adt astdt; run; proc printto; run;