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

I am trying to use the SGPLOT procedure to create a stacked horizontal bar chart with four categories and apply a color scheme using the attrid statement.

 

In order to get the four categories in the proper order (rather than alphabetical), each category was assigned a numeric variable (1-4) and a format statement is used to convert the numeric variable back into the category label.

 

The issue is that I can either get the format to work but the attrid statement won't work to assign the appropriate colors or the attrid statement works to assign the colors and I am left with (1,2,3,4) in my legend.

 

The first statement produces an output with the appropriate values for label but not the colors specified by the evh type

 

proc sgplot data=combined5 dattrmap=formatdw.evhstyle;
format value valfmt.;
hbar &sumvar. / response=pcs1 stat=sum
group=value groupdisplay=stack nooutline attrid=evh;
title "Primary Care Services by Type";
run;

SAS2.JPG

 

The second statement produces a graph with the appropriate colors but leaves (1,2,3,4) in the legend as the values used to order the stacked bars

 

proc sgplot data=combined5 dattrmap=formatdw.evhstyle;
hbar &sumvar. / response=pcs1 stat=sum
group=value groupdisplay=stack nooutline attrid=evh;
title "Primary Care Services by Type";
run;

sas1.JPG

Ideally, I'd like the bars stacked in the proper order, with the color scheme applied and the service types labeled in the legend. Thanks in advance for any help.

1 ACCEPTED SOLUTION

Accepted Solutions
PGStats
Opal | Level 21

Use the formatted group values in your dattrmap dataset, sort your data by your numeric variable, and use grouporder=data in the hbar statement. 

PG

View solution in original post

3 REPLIES 3
WarrenKuhfeld
Rhodochrosite | Level 12

I don't know the answer, and there is not enough code here for me to easily reconstruct what you are doing.  However, I can say that one of the standard legend tricks is to make an invisible plot that has the legend you want and overlay it with a visible plot that makes the graph that you want (and don't show the legend for it). 

 

Also, in either the latest release or the second latest, there is a legenditem statement that is very cool and lets you control precisely what is in the legend.  If no one posts better ideas, you might try those.

Reeza
Super User
It would be helpful if you can replicate this using a SASHELP table or provide some sample data so we can test solutions rather than make some generic suggestions.
PGStats
Opal | Level 21

Use the formatted group values in your dattrmap dataset, sort your data by your numeric variable, and use grouporder=data in the hbar statement. 

PG

sas-innovate-2024.png

Don't miss out on SAS Innovate - Register now for the FREE Livestream!

Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.

 

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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 3 replies
  • 2562 views
  • 0 likes
  • 4 in conversation