Data visualization with SAS programming

Grotta bar chart

Accepted Solution Solved
Reply
Occasional Contributor
Posts: 7
Accepted Solution

Grotta bar chart

Hi all,

I'm trying to produce similar figure to the one in the shell(see attachments please), I'm having hard time to put score 0 1, 2 3 etc. on the top of first row..Any help is appreciated.

 

proc sgpanel code:

proc sgpanel data=mrs pctlevel=group dattrmap=attrmap sganno=annods noautolegend;

panelby avisitn / columns=1 novarname HEADERATTRS=(weight=bold);

hbar trtpn / group=aval stat=pct ATTRID=AVAL;

format trtpn trt. avisitn vis.;

colaxis label="Patients (%)" values=(0 to 1 by 0.2) valuesdisplay=('0' '20' '40' '60' '80' '100');

styleattrs datacontrastcolors=(black);

run;

 

Thanks

Jomaa


Accepted Solutions
Solution
Thursday
SAS Super FREQ
Posts: 1,080

Re: Grotta bar chart

Looks you are using GROUPDISPLAY=CLUSTER.  To stack the segments, remove that setting, or use GROUPDISPLAY=STACK which is default.

View solution in original post


All Replies
SAS Super FREQ
Posts: 1,080

Re: Grotta bar chart

Interesting graph.  To address your specific question, to add the Score labels, here is what comes to my mind.  

 

Is the score value tied to the color (like a group)?  If yes, you could simply use a KEYLEGEND to display these in a legend.

 

If you need the score displayed as in the visual, then you would presummarize your values by group to get the group statistic that are to be stacked.  Then,  loop through the group response values and stack them yourself, computing the midpoint of each segment as it would be stacked (and also the low and high values).  Then use a HBARPARM to display the bar, or use a HIGHLOW plot with the low and high values you computed.  Then, use a TEXT plot to display the score value at the midpoint you computed.  You can offset the text plot using DISCRETEOFFSET to move the values up.  Or, use an XAXISTABLE to plot the score, and you can also get the label "Score" to the left.

 

If you send some (simulated) data, maybe we can try it.  What SAS release version are you using. 

 

To create the graph like you have, after computing the statistics as above, you could convert it into polygon data, and then display each bar and connections as polygons.  This could work.  Score would get repeated in each cell.  Smiley Happy

Occasional Contributor
Posts: 7

Re: Grotta bar chart

Thanks Sanjay,

the version is 6.1 SAS Enterprise guide.

I tried to use the keylegend as you mentioned but I've been told to produce the figure as similiar as possible to the one in the shellSmiley Sad ..Also I tried to insert Score 0 1 2 3 manually, unfortunatly it did not displayed nicely..attached is a dummy data..your help is very appreciated.

 

Jomaa

Attachment
SAS Super FREQ
Posts: 1,080

Re: Grotta bar chart

Please post the SAS version you are connecting to using EG.  EG version is not relevant.

Occasional Contributor
Posts: 7

Re: Grotta bar chart

Sorry ,  not sure if i got you, what I saw is that SAS EG 6.1 is 'equivalent'/ support  sas versions 9.2, 9.3 & 9.4

SAS Super FREQ
Posts: 1,080

Re: Grotta bar chart

You can enter "%put &sysvlong;" in a program window to see the version in the Log window like "9.04.01M4Pmmddyy".

Occasional Contributor
Posts: 7

Re: Grotta bar chart

here we goSmiley Happy it's

 

9.04.01M2P072314

 

SAS Super FREQ
Posts: 1,080

Re: Grotta bar chart

Please send your formats and attribute map.  You have 3 levels for TRTPN. 

Occasional Contributor
Posts: 7

Re: Grotta bar chart

proc sql;

select count (distinct usubjid) into: n61 from mrs where trtpn=1 and avisitn=6;

select count (distinct usubjid) into: n62 from mrs where trtpn=2 and avisitn=6;

select count (distinct usubjid) into: n63 from mrs where trtpn=3 and avisitn=6;

select count (distinct usubjid) into: n71 from mrs where trtpn=1 and avisitn=7;

select count (distinct usubjid) into: n72 from mrs where trtpn=2 and avisitn=7;

select count (distinct usubjid) into: n73 from mrs where trtpn=3 and avisitn=7;

select count (distinct usubjid) into: n81 from mrs where trtpn=1 and avisitn=8;

select count (distinct usubjid) into: n82 from mrs where trtpn=2 and avisitn=8;

select count (distinct usubjid) into: n83 from mrs where trtpn=3 and avisitn=8;

quit;

proc format;

value trt 1=" Placebo (N= )"

2="Natalizumab 300mg (N= )"

3="Natalizumab 600mg (N= )"

;

value vis 6="Day 5"

7="Day 30"

8="Day 90"

;

value x 0='0';

run;

data annods;

length label $100;

function='text';

x1=18.25; y1=89.85; label="&n61."; output;

x1=18.25; y1=83.5; label="&n62."; output;

x1=18.25; y1=77.70; label="&n63."; output;

x1=18.25; y1=62.75; label="&n71."; output;

x1=18.25; y1=56.65; label="&n72."; output;

x1=18.25; y1=50.55; label="&n73."; output;

x1=18.25; y1=35.25; label="&n81."; output;

x1=18.25; y1=29.50; label="&n82."; output;

x1=18.25; y1=23.50; label="&n83."; output;

run;

/* To associated color to each score*/

data attrmap;

retain id "AVAL";

length value 8.0 fillcolor $9 ;

input value fillcolor $ ;

cards;

0 CXAEADD9

1 CX8585A6

2 CX5C5C73

3 CX3230B2

4 CX201F73

5 CX090766

6 CX100F26

run;

SAS Super FREQ
Posts: 1,080

Re: Grotta bar chart

While this is not a full solution, it is a step in the direction you want.  I used SGPLOT, but you can likely split it up using SGPANEL.  I used XAXISTABLE to place the group values.  This was not doable with HIGHLOW plot due to a defect we found.  So, I have to do that using HBARPARM.  That is OK, but one has to ensure the groups are stacked in the same order as the values displayed using AxisTable.

Attachment
Attachment
Occasional Contributor
Posts: 7

Re: Grotta bar chart

Thanks Sanjay, your output with Hbarparm looks fine to me , however when I run your code I have another format output,,can you please check the attached output please?

Attachment
Solution
Thursday
SAS Super FREQ
Posts: 1,080

Re: Grotta bar chart

Looks you are using GROUPDISPLAY=CLUSTER.  To stack the segments, remove that setting, or use GROUPDISPLAY=STACK which is default.

Occasional Contributor
Posts: 7

Re: Grotta bar chart

Thanks so much Sanjay,,your hep is very appreciated.

Grand Advisor
Posts: 10,210

Re: Grotta bar chart

Many users here don't want to download Office files because of virus potential, others have such things blocked by security software.

 

Images in png form can be posted to the forum directly.

 

Data in the form of a datastep will let us test code against you data. Since the actual content of data is strongly associated with what the graphic procedures can do at least some data is extremely helpful in general. Instructions here: https://communities.sas.com/t5/SAS-Communities-Library/How-to-create-a-data-step-version-of-your-dat... will show how to turn an existing SAS data set into data step code that can be pasted into a forum code box using the {i} icon or attached as text to show exactly what you have and that we can test code against.

☑ This topic is SOLVED.

Need further help from the community? Please ask a new question.

Discussion stats
  • 13 replies
  • 140 views
  • 0 likes
  • 3 in conversation