options nocodegen; ods listing close; %let pid=01-709-1217; %let grwidth=700; %let grwpx=700px; %let dpi=100; %let gpath='C:\'; %let where=(where=(usubjid="&pid")); libname SDD "C:\Data3_CDISC"; ods escapechar="^"; /*---------------------------------------------------*/ /*--Extract AE data for one patient, reduce columns--*/ /*---------------------------------------------------*/ data ae1; set sdd.ae&where. end=eof; keep studyid usubjid aeseq aeterm aesev aeout aestdtc aeendtc aestdate aeendate aestdy aeendy aedecod aeacn; format aestdate aeendate mindate maxdate YYMMDD10.; retain minday maxday mindate maxdate; aestdate = input(substr(AESTDTC, 1, 10), YYMMDD10.); aeendate = input(substr(AEENDTC, 1, 10), YYMMDD10.); if ( _n_ = 1) then do; minday=aestdy; if aeendy = . then maxday = aestdy; else maxday=aeendy; mindate=aestdate; if endate = . then maxdate = endate; else maxdate=endate; end; minday=min(minday, aestdy); maxday=max(maxday, aeendy); mindate=min(mindate, aestdate); maxdate=max(maxdate, aeendate); put aedecod; call symput ("OneCM", aedecod); if ( eof = 1 ) then do; call symputx('minday', minday); call symputx('maxday', maxday); call symputx('mindate', mindate); call symputx('maxdate', maxdate); end; run; data ae; set ae1 nobs=nobs; length graphht $6; format lastdate YYMMDD10. lastday BEST12.; y=10*aeseq/nobs; yc=y-0.3; graphht=put(15*nobs+300, 4.); graphht = cats(graphht, "px"); call symputx('grhtAE', graphht); /*--AE Graph height--*/ if aeendy = . then lastday= symget('maxday'); else lastday= aeendy; if aeendate = . then lastdate = symget('maxdate'); else lastdate = aeenddate; if aesev = 'MILD' then sev=1; else if aesev = 'MODERATE' then sev=2; else if aesev = 'SEVERE' then sev=3; else sev=4; run; /*--Find corresponding min date for minday = -10 --*/ data _null_; min = -12; delta = min - &minday; mindate2 = &mindate + delta; call symputx('mindate2', mindate2); call symputx('minday2', min); run; /*--Create severity data to ensure all severity values are in the data set--*/ data severity; input aesev $ xs ys; datalines; MILD -100 -100 MODERATE -100 -100 SEVERE -100 -100 ; run; /*--Add End Caps to AE Timeline data--*/ data AE_Cap; set ae; keep aeseq aedecod aestdy aeendy aestdate aesev aehicap; label aesev='Severity'; if aeendate = . then do; aeendate=&maxdate; aeendy=&maxday; aehicap='FilledArrow'; end; if aeendy eq aestdy then aeendy=aestdy+0.5; run; /*--Attribute Maps--*/ data attrmap; retain id 'Severity'; length value $9 fillcolor $ 15; input value fillcolor; datalines; MILD cx00af00 MODERATE cxcfaf00 SEVERE cxaf0000 ; run; proc sort data=ae_cap out=ae_cap_sort; by aedecod aestdy; run; /*--AE by aedecod without multiple labels--*/ data ae_by_name; set ae_cap_sort; keep aedecod aestdy aeendy aestdate aesev aename aehicap; by aedecod; if first.aedecod then aename=aedecod; run; /*--AE Graph using High Low plot (Type=Bar) by AESEQ--*/ ods graphics / reset width=6in height=3.5in imagename="AETimelineByName" noscale; title "Adverse Events for Patient Id = &pid (SAS 9.3)"; proc sgplot data=ae_by_name dattrmap=attrmap; format aestdate date7.; refline 0 / axis=x lineattrs=(color=black); highlow y=aedecod low=aestdy high=aeendy / type=bar group=aesev barwidth=0.8 lowlabel=aename lineattrs=(color=black pattern=solid) highcap=aehicap attrid=Severity; scatter y=aedecod x=aestdate / x2axis markerattrs=(size=0); xaxis grid display=(nolabel) offsetmax=0.02 values=(&minday2 to &maxday by 2); x2axis display=(nolabel) offsetmax=0.02 values=(&mindate2 to &maxdate); yaxis grid display=(noticks novalues nolabel); run; /*--AE Graph using High Low plot (Type=Bar) by AEDECOD--*/ ods graphics / reset width=6in height=4in imagename="AETimelineBySeq" noscale; title "Adverse Events for Patient Id = &pid (SAS 9.3)"; proc sgplot data=AE_Cap dattrmap=attrmap; format aestdate date7.; refline 0 / axis=x lineattrs=(color=black); highlow y=aeseq low=aestdy high=aeendy / type=bar group=aesev barwidth=0.8 lowlabel=aedecod lineattrs=(color=black pattern=solid) highcap=aehicap attrid=Severity; scatter y=aeseq x=aestdate / x2axis markerattrs=(size=0); xaxis grid display=(nolabel) offsetmax=0.02 values=(&minday2 to &maxday by 2); x2axis display=(nolabel) offsetmax=0.02 values=(&mindate2 to &maxdate); yaxis grid display=(noticks novalues nolabel); run; title; footnote; ods _all_ close; ods listing;