I have a number of different bar charts that are going into the same presentation. SAS (9.4) is arbitrarily (at least that's how I view it) assigning colors to the segments of the bars and they are not consistent across charts. I would like to assign the colors. In addition, I cannot figure out how to put a border around the whole chart.
I have attached sample data...I have many more managers and observations than what is in the sample. I've also attached a snippet of the resulting chart.
Legend1 label=none ;
ods graphics / border=on ;
goptions border ;
Proc GCHART data=MgrName ;
vbar Usage_Month / discrete subgroup=Manager legend=legend1 type = freq ;
Run ;
Gchart generally assigns appearance based on the order of appearance of a value in the data matched against the current list of PATTERN statements in effect. The "randomness" may be reduced by sorting the data by that variable so the values appear in order more often.
As such, keeping colors/ patterns/symbols consistent for "Fred", especially when "Fred" does not appear in every graph is extremely challenging.
You might want to consider moving to Proc SGPLOT / SGPANEL. The later versions of SAS include the statistical graph procedures as part of the base SAS installation. The feature you are looking for involves DATTRMAP data sets where you can create a data set that supplies one or more sets of rules so that "Fred" will always have the same color, pattern, marker symbol, line pattern or other graphics appearance option.
This really is not a short 3 or 3 line to describe and us though. Look in the documentation for Proc SGPLOT statement and the option DATTRMAP. SGPANEL is similar but allows showing graphs with a separate graph for each combination of one or more other variables.
Here is a simple example:
data attrmap;
retain id "myid" linecolor "black";
input value $ fillcolor $;
cards;
F pink
M blue
;
run;
proc sgplot data=sashelp.class dattrmap=attrmap;
vbar age / response=weight stat=mean group=sex
attrid=myid groupdisplay=cluster;
run;
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 16. Read more here about why you should contribute and what is in it for you!
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.