Document text
file:///J/...%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsympt-sas.txt[7/5/2023 10:22:54 AM]************************************************************************************************
**;** Program Name : adsympt.sas **;** Date Created : 17Nov2021 **;** Programmer Name : **;
** Purpose : Create adsympt dataset **;** Input data : CE, CM, DS, FA, IS, HO, SUPPHO, MH, MB, SUPPMB, LB/LBOP, VS and ADSL **;** Output data : adsympt.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;
libname dataprot "&oprot." access=readonly;
libname datvprot "&protori./data_vai" access=readonly;libname datvout "&prot./data_vai";libname viewpx "/Volumes/app/saseng/prod/cdisc3_0/view/" access=readonly;
proc printto print="&prot./output/adsympt.rpt"
log="&prot./logs/adsympt.log" new;run;******************************************************************************************;* Clean *;******************************************************************************************;
proc delete data=work._all_;
run;
** Get CE data. **;
data ce(keep=studyid domain usubjid paramn paramcd param parcat1 parcat2 aval avalc 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'); length paramn 8 paramcd $8 param parcat1 parcat2 avalc $200; parcat1=upcase(strip(cecat)); parcat2='';
if upcase(strip(cescat))='SIGNIFICANT ACUTE RENAL DYSFUNCTION' then
do; paramn=25; paramcd='SARDFN'; param=upcase(strip(cescat)); end; else if upcase(strip(cescat))='SIGNIFICANT ACUTE HEPATIC DYSFUNCTION' then
(b) (4), (b)
(6)
FDA-CBER-2022-5812-0073026
file:///J/...%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsympt-sas.txt[7/5/2023 10:22:54 AM] do;
paramn=30;
paramcd='SAHDFN'; param=upcase(strip(cescat)); end; else if upcase(strip(cescat))='SIGNIFICANT ACUTE NEUROLOGIC DYSFUNCTION' then do; paramn=35; paramcd='SANDFN'; param=upcase(strip(cescat)); end; aval=.; avalc='Y'; adt=input(cedtc, yymmdd10.); astdt=input(cestdtc, yymmdd10.); aendt=input(ceendtc, 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'))) and avalc ^='' then output;run;
** Get CM data. **;data cm;
length cmscat $100.; set dataprot.cm;
if cmscat='' then
cmscat='';run;
proc sort data=cm out=cm1;
where upcase(strip(cmcat))='GENERAL CONCOMITANT MEDICATIONS' and upcase(strip(cmscat))='VASOPRESSORS AGENTS' and cmtrt ^=''; by usubjid cmstdtc cmtrt;run;
data cm(keep=studyid domain usubjid paramn paramcd param parcat1 parcat2 aval
avalc adt astdt aendt visitnum visit); set cm1; by usubjid cmstdtc cmtrt; length paramn 8 paramcd $8 param parcat1 parcat2 avalc $200 visit $64; parcat1=strip(cmcat); parcat2=strip(cmscat); paramn=80; paramcd='VSOPRES'; param=upcase(strip(cmscat)); aval=.;
if cmdecod ^='' then
avalc=upcase(strip(cmdecod));
FDA-CBER-2022-5812-0073027
file:///J/...%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsympt-sas.txt[7/5/2023 10:22:54 AM] else
avalc=upcase(strip(cmtrt));
adt=.; astdt=input(cmstdtc, yymmdd10.); aendt=input(cmendtc, yymmdd10.); visitnum=.; visit=''; format adt astdt aendt date9.;
if avalc ^='' then
output; *if last.cmstdtc then output;run;
** Gather death details DD. **;data adsl_dth(keep=studyid usubjid dthdt);
set datvprot.adsl; where dthdt ^=.;run;
data dd(keep=studyid domain usubjid paramn paramcd param parcat1 parcat2 aval
avalc adt astdt aendt visitnum visit); set adsl_dth(in=b); by usubjid; length paramn 8 paramcd $8 param parcat1 parcat2 avalc $200 visit $64; parcat2=''; aval=.; adt=dthdt; astdt=.; aendt=.; visitnum=.; visit=''; if b then do; domain='DD'; paramn=95; paramcd='PRCDTH'; param='PRIMARY CAUSE OF DEATH'; parcat1='DEATH DETAILS CODED'; avalc=''; end; format adt astdt aendt date9.;run;
** Get death records from DS. **;proc sort data=dataprot.ds out=ds1;
where upcase(strip(dsdecod))='DEATH'; by usubjid dsdtc;run;
data ds(keep=studyid domain usubjid paramn paramcd param parcat1 parcat2 aval
avalc adt astdt aendt visitnum visit);
FDA-CBER-2022-5812-0073028
file:///J/...%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsympt-sas.txt[7/5/2023 10:22:54 AM] set ds1;
by usubjid dsdtc;
if first.usubjid;
length paramn 8 paramcd $8 param parcat1 parcat2 avalc $200 visit $64; paramn=99; paramcd=upcase(strip(dsdecod)); param=upcase(strip(dsdecod)); parcat1=upcase(strip(dscat)); parcat2=''; aval=.; avalc='Y'; adt=.; astdt=input(dsstdtc, yymmdd10.); aendt=.; visitnum=.; visit=''; format adt astdt aendt date9.;run;
** 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; 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;
FDA-CBER-2022-5812-0073029
file:///J/...%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsympt-sas.txt[7/5/2023 10:22:54 AM] 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'; 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';
FDA-CBER-2022-5812-0073030
file:///J/...%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsympt-sas.txt[7/5/2023 10:22:54 AM] 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; 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;
FDA-CBER-2022-5812-0073031
file:///J/...%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsympt-sas.txt[7/5/2023 10:22:54 AM] 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 data from HO. **;proc sql;
create table ho1 as select * from dataprot.ho left join (select qval as HCUHSP 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 qval as HCUICU from dataprot.suppho as b where upcase(strip(qnam))='HCUICU') on strip(usubjid)=strip(b.usubjid) and strip(put(hoseq, best.))=strip(b.idvarval); create table ho3 as select distinct * from ho2 left join (select hostdtc as hostdtc_, hoendtc as hoendtc_, hoenrtpt as hoenrtpt_, hoentpt as hoentpt_ from ho2 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 (hcuhsp ^='' or hcuicu ^='') order by usubjid, hoseq, hostdtc;quit;
data ho4;
set ho3; by usubjid hoseq hostdtc;
if first.hoseq and last.hoseq then
dupflg=0; else dupflg=1;run;
data ho5;
FDA-CBER-2022-5812-0073032
file:///J/...%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsympt-sas.txt[7/5/2023 10:22:54 AM] set ho4;
by usubjid hoseq hostdtc;
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;
data ho(keep=studyid domain usubjid paramn paramcd param parcat1 parcat2 aval
avalc adt astdt aendt visitnum visit); set ho5; by usubjid hoseq hostdtc; where upcase(strip(hoterm))='ICU' or hcuhsp ^='' or hcuicu ^=''; length paramn 8 paramcd $8 param parcat1 parcat2 avalc $200; parcat1=strip(hocat); parcat2=''; aval=.; adt=input(hodtc, yymmdd10.); astdt=input(hostdtc, yymmdd10.); aendt=input(hoendtc, yymmdd10.); format adt astdt aendt date9.;
if upcase(strip(hoterm))='ICU' then
do; paramn=91; paramcd='HCUICU'; param='SUBJECT IN ICU DUE TO POTENTIAL COVID-19 ILLNESS'; avalc='Y'; output; end;
if upcase(strip(hcuicu))='Y' then
do; paramn=91; paramcd='HCUICU'; param='SUBJECT IN ICU DUE TO POTENTIAL COVID-19 ILLNESS'; avalc=upcase(strip(hcuicu)); astdt=input(hostdtc_, yymmdd10.); aendt=input(hoendtc_, yymmdd10.); output; end;
if upcase(strip(hcuhsp))='Y' then
do; paramn=92; paramcd='HCUHSP'; param='HOSPITALIZED DUE TO COVID-19 ILLNESS?'; avalc=upcase(strip(hcuhsp)); astdt=input(hostdtc_, yymmdd10.); aendt=input(hoendtc_, yymmdd10.); output; end;
run;
FDA-CBER-2022-5812-0073033
file:///J/...%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsympt-sas.txt[7/5/2023 10:22:54 AM]** 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=.; aendt=.; format adt astdt aendt date9.; *if strip(visit) in ('V1_DAY1_VAX1_L') then output;run;
data lb(keep=studyid domain usubjid paramn paramcd param parcat1 parcat2 aval
avalc adt astdt aendt visitnum visit_ lborresu rename=(visit_=visit)); set dataprot.lb; where strip(lbtestcd)='PO2FIO2'; length paramn 8 paramcd $8 param parcat1 parcat2 avalc $200 visit_ $64; parcat1=strip(lbcat); parcat2=strip(lbscat); paramn=60; paramcd=strip(lbtestcd); param=upcase(strip(lbtest)); aval=input(lborres, best.); avalc=''; visit_=strip(visit); adt=input(lbdtc, 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'))) and aval ^=. 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
FDA-CBER-2022-5812-0073034
file:///J/...%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsympt-sas.txt[7/5/2023 10:22:54 AM] (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 mh;
set dataprot.mh;
if strip(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'); c19ilhfl='Y';run;
** Get VS data. **;data vs(keep=studyid domain usubjid paramn paramcd param parcat1 aval avalc adt
astdt aendt visitnum visit vsstresu);
FDA-CBER-2022-5812-0073035
file:///J/...%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsympt-sas.txt[7/5/2023 10:22:54 AM] set dataprot.vs;
where upcase(strip(vscat))='GENERAL VITAL SIGNS' and strip(vstestcd)
in ('RESP', 'HR', 'OXYSAT', 'DIABP', 'SYSBP'); length paramn 8 paramcd $8 param parcat1 avalc $200; paramcd=strip(vstestcd); param=upcase(strip(vstest)); parcat1=strip(vscat); parcat2=strip(vsscat);
if vstestcd='RESP' then
paramn=50;
if vstestcd='HR' then
paramn=51;
if vstestcd='OXYSAT' then
paramn=52;
if vstestcd='DIABP' then
paramn=53;
if vstestcd='SYSBP' then
paramn=54; aval=vsstresn;
if aval=. and vsstresc ^='' then
avalc=strip(vsstresc); adt=input(vsdtc, 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'))) and (aval ^=. or avalc ^='') then output;run;
data adsympt1;
set ce cm dd ds fa ho is lb mb1 vs; 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;
** To collect visits from Signs and Symptoms, Covid test results, medication/procedures, ICU admission, vital signs
and ** create an aggregated set of visits and collapse when they are within specified range;
%let __excl_vis1a =
FDA-CBER-2022-5812-0073036
file:///J/...%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsympt-sas.txt[7/5/2023 10:22:54 AM]%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; 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;
FDA-CBER-2022-5812-0073037
file:///J/...%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsympt-sas.txt[7/5/2023 10:22:54 AM] 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. **;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;
FDA-CBER-2022-5812-0073038
file:///J/...%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsympt-sas.txt[7/5/2023 10:22:54 AM]** 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;
set __ce __fa __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);
FDA-CBER-2022-5812-0073039
file:///J/...%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsympt-sas.txt[7/5/2023 10:22:54 AM] 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 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. **;
FDA-CBER-2022-5812-0073040
file:///J/...%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsympt-sas.txt[7/5/2023 10:22:54 AM] 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 strip(visit) not in (&__excl_vis1a, &__excl_vis1b, &__excl_vis2,
&__excl_vis3) and visitnum ^=. and visit ^='' then visflg=1; else visflg=0;run;
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;
FDA-CBER-2022-5812-0073041
file:///J/...%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsympt-sas.txt[7/5/2023 10:22:54 AM]** 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); 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;
FDA-CBER-2022-5812-0073042
file:///J/...%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsympt-sas.txt[7/5/2023 10:22:54 AM] 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; ** Check the current dates and visits and collapse. **; ** AD(26May2021): added '. <' condition to not collapse visit is starting date in missing for next visit **;
if visitnum_ ^=visitnum then
do;
if (aendt_=. and astdt_ <=astdt <=sum(astdt_, 3))
FDA-CBER-2022-5812-0073043
file:///J/...%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsympt-sas.txt[7/5/2023 10:22:54 AM] 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
do; avisitn=visitnum; avisit=visit; end;
FDA-CBER-2022-5812-0073044
file:///J/...%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsympt-sas.txt[7/5/2023 10:22:54 AM] 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; avisitn=visitnum; avisit=strip(visit); end;
if rvflg=1 then
FDA-CBER-2022-5812-0073045
file:///J/...%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsympt-sas.txt[7/5/2023 10:22:54 AM] 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;
proc sql;
create table adsympt3 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 order by usubjid, visitnum, visit, adt, astdt, aendt;quit;
data adsympt4;
recseq=put(_n_, z7.); set adsympt3;
if clspfl='Y' then
do; avisitn=avisitn_clsp; avisit=avisit_clsp; end;run;
** Generate unique visits. **;proc sql;
create table visits_mod as select usubjid, avisitn, avisit, min(astdt) as astdt_v format yymmdd10., max(aendt) as aendt_v format yymmdd10. from adsympt4 where astdt ^=. and avisitn ^=. and avisit ^='' group by usubjid, avisitn, avisit;quit;
data visits_mod;
set visits_mod; by usubjid avisitn avisit;
if first.usubjid and last.usubjid then
viscntflg=0;
FDA-CBER-2022-5812-0073046
file:///J/...%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsympt-sas.txt[7/5/2023 10:22:54 AM] else
viscntflg=1;
run;
proc sql;
** Merge Covid-19 illness history flag. **; create table adsympt5(drop=avisitn_clsp avisit_clsp clspfl) as select * from adsympt4 left join (select distinct usubjid as usub, c19ilhfl from mh as b where c19ilhfl ^='') on strip(usubjid)=strip(b.usubjid); ** Try to map AVISTN and AVISIT for records with missing visits. **; create table adsympt5_b as select * from (select * from adsympt4 where visitnum=.) left join (select viscntflg, avisitn as avisitn_v, avisit as avisit_v, astdt_v, aendt_v from visits_mod as b) on (usubjid=b.usubjid) and (((astdt ^=.) and ((. < astdt_v <=astdt) or (aendt ^=. and aendt_v ^=. and astdt_v <=astdt <=aendt_v) or (aendt ^=. and b.viscntflg=0 and astdt_v <=astdt))) or ((astdt ^=. and adt ^=.) and ((aendt=. and astdt_v <=adt) or (aendt ^=. and astdt_v <=adt <=aendt_v))) ) order by usubjid, astdt, adt, recseq, astdt_v;quit;
data adsympt5_c;
set adsympt5_b; by usubjid astdt adt recseq astdt_v;
if strip(paramcd) not in ('PRCDTH', 'SECDTH', 'DEATH') then
do; avisitn=avisitn_v; avisit=avisit_v; end;
if first.recseq and last.recseq then
keepflg=1; else do;
if last.recseq then
keepflg=1; end;run;
data adsympt6(drop=recseq avisitn_v avisit_v astdt_v aendt_v keepflg);
set adsympt5(where=(visitnum ^=.)) adsympt5_c(where=(keepflg=1));run;
proc sql;
** Merge ADSL Variables. **; create table adsympt7 as select * from adsympt6 left join (select siteid, subjid, brthdt, agegr1n, agegr1, sex, race, ethnic, armcd, arm, actarmcd, actarm, randdt, trtsdt, trtedt, vax101dt, vax102dt,
enrlfl, randfl, saffl, evaleffl, ev14effl, aai1effl, aai2effl, phasen from
FDA-CBER-2022-5812-0073047
file:///J/...%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsympt-sas.txt[7/5/2023 10:22:54 AM] datvprot.adsl as b) on strip(usubjid)=strip(b.usubjid) order by studyid,
usubjid, visitnum, adt, astdt, paramn;
quit;
proc sql;
** Keep only 12-15 years of Age subjects **; create table adsympt71 as select * from adsympt7 where usubjid in (select distinct usubjid from datvprot.adsl where 12 <=agetr01 <=15) order by studyid, usubjid, visitnum, adt, astdt, paramn;quit;
data adsympt8;
set adsympt71; by studyid usubjid visitnum adt astdt paramn; 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'; 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;
FDA-CBER-2022-5812-0073048
file:///J/...%20(0211)/0211/m5/datasets/c4591001/analysis/adam/programs-6mth/125742-45_S211_M5_c4591001-A_6mth-P-adsympt-sas.txt[7/5/2023 10:22:54 AM] if aendt >=trtsdt then
aendy=aendy + 1; end; end;
if siteid='' then
siteid=strip(scan(usubjid, 2, ' '));
if subjid='' then
subjid=strip(scan(usubjid, 3, ' '));run;
data datvout.adsympt(label="Covid-19 Signs and Symptoms Analysis Dataset");
retain studyid usubjid siteid subjid brthdt agegr1n agegr1 sex race ethnic armcd arm actarmcd actarm paramn paramcd param parcat1 parcat2 aval avalc visitnum visit avisitn avisit adt ady astdt astdy aendt aendy isspec ismethod mbloc mbspec mbmethod vsstresu randdt trtsdt trtedt vax101dt vax102dt enrlfl randfl saffl evaleffl ev14effl aai1effl aai2effl c19ilhfl; set adsympt8; where phasen > 1; by studyid usubjid visitnum adt astdt paramn; keep studyid usubjid siteid subjid brthdt agegr1n agegr1 sex race ethnic armcd arm actarmcd actarm paramn paramcd param parcat1 parcat2 aval avalc visitnum visit avisitn avisit adt ady astdt astdy aendt aendy isspec ismethod mbloc mbspec mbmethod vsstresu randdt trtsdt trtedt vax101dt vax102dt enrlfl randfl saffl evaleffl ev14effl aai1effl aai2effl c19ilhfl; label paramn='Parameter (N)' paramcd='Parameter Code' param='Parameter' parcat1='Parameter Category 1' parcat2='Parameter Category 2' aval='Analysis Value' avalc='Analysis Value (C)' avisitn='Analysis Visit (N)' avisit='Analysis Visit' 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' isspec='IS Specimen Type' ismethod='IS Method of Test or Examination' mbspec='MB Specimen Type' mbmethod='MB Method of Test or Examination' c19ilhfl='Prior Covid-19 Illness History Flag';run;
proc printto;
run;
FDA-CBER-2022-5812-0073049