Try the below code, not tested due to lack of data, but should work
%let visits= C1D1 C1D3 C1D8 C1D15 C1D22 C1D29 C1D36 C2D1 C2D3 C2D8 C2D15 C2D22 C2D29 C2D36 C3D1 C3D8 C3D15 C3D22 C4D1 C4D8 C4D15 C4D22 C5D1 C6D1 C7D1 C8D1 C9D1 C10D1 CXD1;
%let labels= Cycle 1 Day1/Cycle 1 Day3/Cycle 1 Day8/Cycle 1 Day15...;
%macro report;
proc report data = final_lab;
column subject RFSTDAT_DER_RAW SCREEN &visits;
define Subject/ display 'Subject' ;
define RFSTDAT_DER_RAW/ display 'First Dose Date';
define Screen/ display 'Screening';
%let num= %sysfunc(countw(&visits));
%do i= 1 %to #
%let visit= %scan(&visits, &i);
%let label= %scan(&visits, &i, /);
define &visit/ display "&label" ;
compute &visit;
if &visit = 'ND' then call define("&visit", "style", "style=[background=grey]");
else if &visit LE 1 then call define("&visit", "style", "style=[background=lightyellow]");
else if &visit >= 1 and C1D1 =<2 then call define("&visit", "style", "style=[background=lightgreen]");
else if &visit >= 3 and C1D1 < 6 then call define("&visit", "style", "style=[background=orange]");
else if &visit >= 6 and C1D1 < 8 then call define("&visit", "style", "style=[background=lightblue]");
else if &visit >= 8 then call define("&visit", "style", "style=[background=red]");
endcomp;
%end;
run;
%mend;
%report;
... View more