BookmarkSubscribeRSS Feed
mariko5797
Pyrite | Level 9

I am trying to use ODS Graphics Designer to create the following graph:

mariko5797_0-1649954705739.png

I tried to use the "Block" plot, but it seems to only allow two colors: missing/not missing or multi-colors with no control over color assignment. Is there a way to create such a plot using ODS Graphics? I would prefer using designer since I need to stack a lot of graphs, but it's not a requirement.

5 REPLIES 5
DanH_sas
SAS Super FREQ

Yes, this can be done; but can you tell more about your plot axis? Is it continuous or discrete? Do you want each of your block plots to be labeled?

mariko5797
Pyrite | Level 9

Data is discrete and stored numerically: 1 (mild), 2 (moderate), 3 (severe), 0 (none), 5 (not collected). I do not need the boxes labelled with the values nor axis labelled as this plot will be under a scatter plot with the same axis.

DanH_sas
SAS Super FREQ

Normally, I would use PROC SGPLOT to do this; but for your case, I needed the REPEATEDVALUES option on the BLOCK plot, which is not currently surfaced in the SG procedures. To control the value/color association, modify the attrmap data set. To add more BLOCK plots, just add them inside the INNERMARGIN to stack them.

 

Hope this helps!

Dan

 

proc template;
define statgraph example;
begingraph;
layout overlay / xaxisopts=(discreteOpts=(tickvaluefitpolicy=SplitRotate));
   ScatterPlot X=Name Y=Weight / primary=true;
   InnerMargin / align=bottom;
      BlockPlot X=Name Block=age / Display=( Fill Outline Label ) NAME="block" repeatedvalues=true;
   EndInnerMargin;
   DiscreteLegend "block" / Location=Outside;
endlayout;
endgraph;
end;
run;

data attrmap;
retain ID "myid";
length fillcolor $ 6;
input value $ fillcolor $;
cards;
12 blue
13 green
14 yellow
15 orange
16 red
;
run;

proc sgrender data=sashelp.class template=example dattrmap=attrmap;
dattrvar age="myid";
run;
Rick_SAS
SAS Super FREQ

If you are willing to eliminate the gap between each row, this can be done by using a heat map. For example, see the article, "Create a discrete heat map with PROC SGPLOT"

You can use a discrete attribute map to assign colors to values.

 

data Clinical;
input SiteID @;
do Week = 0 to 13;
   input Count @;
   output;
end;
/* ID Wk1  Wk2  Wk3  Wk4 ... Wk14*/
datalines;
001  1 0 0 0 0 0 0 3 1 3 3 0 3 0
002  0 0 0 1 1 2 1 2 2 1 1 0 2 2
003  1 . . 1 0 1 0 3 . 1 0 3 2 1 
004  1 1 . 1 0 1 2 2 3 2 1 0 . 0
005  1 1 1 . 0 0 0 1 0 1 2 3 3 1
;

/* https://blogs.sas.com/content/iml/2019/07/15/create-discrete-heat-map-sgplot.html */
data DiscreteAttrOrder;                /* create discrete attribute map */
length Value $1 FillColor $15;
input Value FillColor;
retain ID 'Malaria'                    /* name of map */
     Show 'AttrMap';                   /* always show all groups in legend */
datalines;
.  Gray
0  White
1  CXFFFFB2
2  CXFD8D3C
3  CXBD0026
;

title "Heat Map of Malaria Data";
proc sgplot data=Clinical DATTRMAP=DiscreteAttrOrder;
   heatmapparm x=Week y=SiteID colorgroup=Count / outline outlineattrs=(color=gray)
               ATTRID=Malaria; 
   discretelegend;
   refline (1.5 to 5.5) / axis=Y lineattrs=(color=black thickness=2);
   xaxis integer values=(0 to 13) valueshint;
run;

SGPlot58.png

Rick_SAS
SAS Super FREQ

I wrote more details and comments about using formats to bin numeric data, discrete attribute maps, and using heat maps for longitudinal data: https://blogs.sas.com/content/iml/2022/04/20/viz-ordinal-response-longitudinal.html

 

sas-innovate-2024.png

Available on demand!

Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.

 

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