BookmarkSubscribeRSS Feed
JFitchTX
Calcite | Level 5

Hello, I've created a report that runs data for ~50 different entities and generates tables/graphs for each into its own pdf that's then being emailed via SAS.  One type of graph has given me problems:

I've created a table - let's say overall performance - that has every entity and a score from 0-100 in it. This is plotted into a bar chart in ascending order. What I'd like to do is highlight one bar in the chart each time it's generated so that each entity can quickly approximate where their performance lies in relation to their peers (see attached).

Any ideas? It's appreciated. I've been trying various things and searching for days but overlay/highlight are too broad of terms to find my answer. I'm an advanced user running SAS 9.2.


chart.JPG
7 REPLIES 7
Jay54
Meteorite | Level 14

I must be missing something, as I would think you could use the GROUP option to highlight the one bar you want.

ballardw
Super User

Some code how you are generating the charts might help to address specific options

The general approach is to assign a categorical variable that is assigned one value for your entity and another value for all others. The syntax to get the color change will change depending on the proc used. You will likely also want to suppress the default legend unless you find it helpful.

GraphGuy
Meteorite | Level 14

Here is one way to do it with gchart ...

data my_data; set sashelp.class;

if name='Alfred' then hilight='Y';

else hilight='N';

run;

axis1 label=none value=(angle=90);

axis2 label=none;

pattern1 v=solid c=blue;

pattern2 v=solid c=red;

proc gchart data=my_data;

vbar name / type=sum sumvar=weight descending

subgroup=hilight nolegend maxis=axis1 raxis=axis2;

run;

cwilson
Calcite | Level 5

Right, so you (the original poster) might want to make use of a macro variable in the data step to dynamically change the value that gets used to flag the highlight column.

Presumeably, you are already doing some kind of macro to loop through your 50+ entities.

For example:

Say you are looping through store names, and have a macro variable called ThisStore for the current store name.

Data my_data ;

  set StoreSales ;

  if storeName = "&ThisStore" then hilight='Y' ;

  else hilight='N' ;

run ;

(Note the use of double-quotes when using a macro variable to substitute in a character variable value.)

GraphGuy
Meteorite | Level 14

Excellent addition, cwilson!

JFitchTX
Calcite | Level 5

Thanks for the help folks! Since this is 2012 I'm using proc template and sgrender to create my graphs rather than gchart but the same ideas apply =P. I never even considered creating another field to do the graph as I was convinced there was a more elegant approach. I ended up creating a new field for highlighting like this

data temp;

set original;

if entity=&macroentity then hilight=performance;

else hilight=0;

And then overlaid that on top of the full chart containing every entity (using barchart command in proc template). It has to recreate the table every iteration - not ideal - but it works fine with some sleep pauses and gives me something else to point to when lobbying for an improved machine =). Thanks again

GraphGuy
Meteorite | Level 14

Gchart still works in 2012 ... better than ever, actually! 🙂

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

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
  • 7 replies
  • 2211 views
  • 9 likes
  • 5 in conversation