Data visualization with SAS programming

Descending values of the vertical axis and position

Reply
Contributor
Posts: 58

Descending values of the vertical axis and position

Hi to all,
I've got the 2 following questions:
1) I've to plot a gchart, where the hbar variable is numeric, and I've applied a format to show it. However, I need to put the values in descending order, but I couldn't find any way to do it (I cannot specify all the values, because the format does regroup the values)...any idea?
2) I've been asked to put the vertical legend in the center of the graph, where the value is 0...I should use the annotate, but how?
Thanks

Daniele
SAS Super FREQ
Posts: 8,719

Re: Descending values of the vertical axis and position

Hi:
Look at the DESCENDING option of the HBAR statement:
http://support.sas.com/documentation/cdl/en/graphref/61884/HTML/default/gchart-bar.htm

It will order the bars in descending order. For example, both HBAR statements will generate bars in descending order:
[pre]
proc gchart data=sashelp.class;
hbar age /levels=6 descending ;
hbar age / discrete descending;
run;
quit;
[/pre]

I'm not sure I understand what you mean by vertical legend?? You mean the position of the statistics?? Or are you using SUBGROUP= that has a legend??? The SUBGROUP legend can be controlled by the LEGEND statement.

However, for more information about using the ANNOTATE facility, refer to these sites for a place to start with Annotate:
http://support.sas.com/documentation/cdl/en/graphref/61884/HTML/default/annodata-ov.htm
http://support.sas.com/documentation/cdl/en/graphref/61884/HTML/default/a002093540.htm#ganvbar-ex http://support.sas.com/documentation/cdl/en/graphref/61884/HTML/default/annotate_annotate.htm
http://www2.sas.com/proceedings/sugi31/085-31.pdf
http://www2.sas.com/proceedings/sugi31/108-31.pdf
http://analytics.ncsu.edu/sesug/2001/P-606.pdf
http://www.nesug.org/Proceedings/nesug97/infviz/mendelso.pdf
http://www.lexjansen.com/mwsug/2007/DataVisualization/D04-2007.pdf

And, this site has a wealth of SAS/GRAPH and ANNOTATE examples:
http://robslink.com/SAS/Home.htm

cynthia
Contributor
Posts: 58

Re: Descending values of the vertical axis and position

Dear Cynthia,
I've tried the descending option, but I believe it works with the sumvar variable, and not the hbar one (in fact, I get some weird ordered diagram, but which is ordered by the sum of the positive values and negative values of the sumvar variable)...I'm pretty sure of the format I'm using, since it's quite simple...
Thanks

Daniele
Super Contributor
Posts: 291

Re: Descending values of the vertical axis and position

Daniele;

Based on your vertical axis question, It seems that you have negative and positive values. Proc GChart HBar will automaitically place the vertical axis at zero.
Example below;
data a;
input a $ b;
cards;
a 1
b -1
c 5
d -1
;
run;


proc gchart;
hbar a/sumvar=b;
run;
quit;
Contributor
Posts: 58

Re: Descending values of the vertical axis and position

Dear Bill,
thank you for your kind answer, but I believe I didn't express myself correctly: what I want is the legend of the vertical axes in the center of the graph (normally is on the left, since this is a hbar graph). Is it possible?
Thanks

Daniele
SAS Super FREQ
Posts: 889

Re: Descending values of the vertical axis and position

If the axis values are already known, the simpliest approach it to specify the values on the MIDPOINTS= option in descending order. If they are no known, there are some techniques for generating this midpoint list dynamically using a macro.

Thanks!
Dan
Contributor
Posts: 58

Re: Descending values of the vertical axis and position

Hi Dan,
I'm not sure of what you have explained on your post...how I should use midpoints?
Let me explain my dataset: I've got values for all the range of different ages from 0 to over 80 years, and I've to plot the values on a hbar diagram, where:
1) I've applied a format for the age, which groups the ages in 5 years segments (0-4 years, over 80 years old, and so on)
2) I'd like to show this diagram in this order:
80 years and over old
75 to 79 old
...
...
0 to 4 years old
3) This legend (which are the ages formatted) should be pun in the center of the graph, where tha value is 0 (the fact is that I've got also negative values, and the legend is at the left of the negative).
Thanks

Daniele
Super Contributor
Posts: 359

Re: Descending values of the vertical axis and position

It has been a long time, but isn't that what the ORIGIN= option on the axis statement does?
Contributor
Posts: 58

Re: Descending values of the vertical axis and position

Hi Flip,
maybe I'm using wrongly the origin option, but it doesn't only move the legend, but it also stretches the diagram...at the point that it doesn't put the legend inside the graph Smiley Sad
Super Contributor
Posts: 359

Re: Descending values of the vertical axis and position

Like I said it has been a while since I did graphics. You may want to annotate it.
SAS Super FREQ
Posts: 889

Re: Descending values of the vertical axis and position

Hey Daniele,

What do you get if you add this option to your HBAR statement:

midpoints=(80 to 0 by -5)

-- Dan
Trusted Advisor
Posts: 1,508

Re: Descending values of the vertical axis and position

I don't see how you can avoid replacing the format by a hard-coded age that is the same for each group.

You can then use the midpoints option to force the order.


>I've been asked to put the vertical legend ...

You mean the axis label?
Contributor
Posts: 58

Re: Descending values of the vertical axis and position

Hi to all,
for the first problem, I've solved by proc tabulating first with the format, and outputting the results in a dataset, that I've used with the proc gchart. In this way I've got one observation for class, and it's easy to order it as I want.
For the second point...yes Chris, I mean the axis1 legend...
Thanks

Daniele Edit: no, I was wrong, I meant the label Smiley Happy

Message was edited by: Daniele Tiles
Trusted Advisor
Posts: 1,508

Re: Descending values of the vertical axis and position

This should get you started:
[pre]
data T;
set SASHELP.CLASS;
AGE+-13;
run;
data ANNO;
XSYS = '5'; * X coordinates use % of graphics output area ;
YSYS = '2'; * Y coordinates use data values ;
FUNCTION = 'label'; * I want to write a string;
TEXT = 'My label'; * This is the string;
X = 5; * Write at position X=5 (% of graphics output area);
Y = 0; * Write at Y=O (data value);
run;
axis1 label=(c=red 'free up space, should be white' );
proc gchart data=T annotate=ANNO;
hbar AGE / discrete nostats maxis=axis1;
run;
quit;
Ask a Question
Discussion stats
  • 13 replies
  • 400 views
  • 0 likes
  • 6 in conversation