BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
nesslee
Fluorite | Level 6

Hello,

I would like to alternate 2 colors in proc report for each new value in a column (row).

row

20

20

20

22

23

23

24

 

so all rows with value=20 will have lightgray color

row with value=22 will have lightgreen color

all rows with value=23 will have lightgrey color

and so on.

The values are not fixed. So I guess i have to first create a variable as compute variable (flag).

Can you please help ?

ods listing close;

proc report data=dupl nowd;

compute flag;

if flag=0 then call define(_row_, "style", "style=[background=lightgray]");

if flag=1 then call define(_row_, "style", "style=[background=lightgreen]");

endcomp;

run;

ods excel close;

1 ACCEPTED SOLUTION

Accepted Solutions
ed_sas_member
Meteorite | Level 14

Hi  @nesslee 

Here is a way to do this -> the idea is to compute a flag that changes each time there is a new value.
Depending on whether the flag is an odd or even number (cf. mod() function), the color changes.

Best,

data dupl;
	input value;
	datalines;
20
20
20
22
23
23
24
	;
run;

data dupl2;
	set dupl;
	by value notsorted;
	if first.flag then flag=0;
	_lag = lag(value);
	if _lag ne value then flag+1;
run;

proc report data=dupl2 nowd;
	
	column value flag;
	
	define value / display;
	define flag / display noprint ;
	
	compute flag;
		if mod(flag,2)=1 then call define(_row_, "style", "style=[background=lightgray]");
		else call define(_row_, "style", "style=[background=lightgreen]");
	endcomp;
run;

Capture d’écran 2020-05-27 à 17.04.46.png

View solution in original post

3 REPLIES 3
ed_sas_member
Meteorite | Level 14

Hi  @nesslee 

Here is a way to do this -> the idea is to compute a flag that changes each time there is a new value.
Depending on whether the flag is an odd or even number (cf. mod() function), the color changes.

Best,

data dupl;
	input value;
	datalines;
20
20
20
22
23
23
24
	;
run;

data dupl2;
	set dupl;
	by value notsorted;
	if first.flag then flag=0;
	_lag = lag(value);
	if _lag ne value then flag+1;
run;

proc report data=dupl2 nowd;
	
	column value flag;
	
	define value / display;
	define flag / display noprint ;
	
	compute flag;
		if mod(flag,2)=1 then call define(_row_, "style", "style=[background=lightgray]");
		else call define(_row_, "style", "style=[background=lightgreen]");
	endcomp;
run;

Capture d’écran 2020-05-27 à 17.04.46.png

nesslee
Fluorite | Level 6

this is great ! thank you so much ! 😄

ed_sas_member
Meteorite | Level 14

You're welcome @nesslee 😊

SAS Innovate 2025: Register Now

Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 3 replies
  • 1985 views
  • 3 likes
  • 2 in conversation