BookmarkSubscribeRSS Feed
henryjing
Calcite | Level 5

The variable EDUCATION has values 1 2 3 4 5 6, which stand for graduate_school, university, high_school, etc.

 

I am trying to plot a standardized segment bar plot as following (picture 1), and I'm also trying to change the tick value to graduate_school, etc, which are what these value really mean. 

 

%let education_label = "graduate_school" "university" "high_school"
"others" "unknown1" "unknown2";
proc sgplot data=Freq_Education_default;
vbar EDUCATION / response = percent group=default
groupdisplay=stack;
xaxis discreteorder=data valuesdisplay =(&education_label);
yaxis grid values=(0 to 100 by 10) label="Percentage of total in group";
run;

 

However, if I change "valuesdisplay" to "values", the plot changes to picture 2, neither of two pictures is what I am aiming for. 

 

1.png

 

2.png

 

2 REPLIES 2
Reeza
Super User

Use a format, not a macro. If a level was missing the labels wouldn't align automatically, whereas they would with a format.

 

 

proc format;
value educ_fmt
1="graduate_school"
2="university"
3="high_school"
..
9 = "unknown2";
run;

Then apply the format within your proc.

 

proc sgplot data=Freq_Education_default;
vbar EDUCATION / response = percent group=default
groupdisplay=stack;

format education educ_fmt.;

xaxis discreteorder=data;
yaxis grid values=(0 to 100 by 10) label="Percentage of total in group";
run;

 

 

henryjing
Calcite | Level 5

Reeza

 

I really appreciate your help.

 

I eventually get what I want. 

 

Again, thanks so much.

 

Henry

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
  • 2 replies
  • 1353 views
  • 0 likes
  • 2 in conversation