BookmarkSubscribeRSS Feed
Forecaster
Obsidian | Level 7

I'm reading "Statistical graphics procedures by example" by Matange and Heath. I'm trying to modify the colors in the sgplot in the example below, but so far I have been not sucessful. Please see below for an example. I'm trying to change the color of "actual" by individual products.

data attrs;

input id $ value $ fillcolor $;

datalines;

actual A Blue

actual B Black

actual B Green

actual D Yellow

;

run;

proc sgplot data = sgbook.product_sales dattrmap=attrs;

  hbar product /response = actual barwidth=0.5 attrid=id;

  hbar product /response=predict barwidth=0.2;

run;

The above code does not work, how would I change the color for individualSGPlot4.png products.

5 REPLIES 5
DanH_sas
SAS Super FREQ

The problem is that the ATTRID is incorrect. The ATTRID should be the *value* in the ID column -- not the ID column name itself. The ID column is a reserved column name in an ATTMAP, so it does not need to be referenced. In your case, set attrid=actual, and you should get the correct result.

Forecaster
Obsidian | Level 7

@DanH, I changed the code following your suggestion, I still do not get the color change, Can you please help

data attrs;

input id $ value $ fillcolor $;

datalines;

ACTUAL A Blue

ACTUAL B Black

ACTUAL C Green

ACTUAL D Yellow

;

run;

proc sgplot data = sgbook.product_sales dattrmap=attrs;

  hbar product /response = actual  barwidth=0.5 attrid=actual;

  hbar product /response=predict barwidth=0.2;

run;

DanH_sas
SAS Super FREQ

The other issue is case-sensitivity. Sorry I missed that earlier. The ID value on the ATTRID option must match the case of the ID value in the ATTRMAP data set. Incidentally, We have added a couple of new columns to the ATTRMAP data set for SAS 9.4m3. One of those columns gives you the ability to turn off case-sensitivity.

Forecaster
Obsidian | Level 7

@DanH for some reason, I'm still not getting the right colors. I have changed the codes for easy replicability.

I'm running this code on SAS 9.3 (TS1M2)

data sales;

  input product $ actual predict;

  datalines;

  A 10 5

  B 12 15

  C 15 18

  D 13 20

  ;

run;

data attrs;

input id $ value $ fillcolor $;

datalines;

actual A blue

actual B black

actual C green

actual D yellow

;

run;

SGPlot24.png

proc sgplot data = sales dattrmap=attrs;

  hbar product /response = actual  barwidth=0.5 attrid=actual;

  hbar product /response=predict barwidth=0.2 ;

run;

DanH_sas
SAS Super FREQ

Sorry, I overlooked that you are not using a GROUP variable. Attrmaps only work when there is a GROUP active. For your example, you just need to use FILLATTRS=(color=<some color>) to control the color of the bars.

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

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
  • 5 replies
  • 3592 views
  • 3 likes
  • 2 in conversation