I am using "sgplot" and making a "hbar" graph. Everything looks fine till I export it to pdf as part of a multi-graph using "ods pdf file". The problem is with y-axis values. The values are scattered left and right.
I tried VALUESHALIGN=left and that will adjust them to the left but with a huge distance from the axis and I don't know how to get rid of it.
I also tried VALUESHALIGN=right but that did not do anything. It did not change the values at all.
I appreciate your though on that.
Code please starting from ODS PDF statement. Data to plot would be helpful as data step code.
Note: PDF by default uses a different ODS style so results often change from the results window appearance.
Thanks for the reply. Sorry I cannot put the data here for some work reasons.
title "Uni";
ods pdf file="X:\reports\Year.pdf" ;
options orientation=portrait papersize=letter topmargin=0.001in bottommargin=0.001in leftmargin=0.001in rightmargin=0.001in;
ods layout Start width=8.5in height=11in ;
ods graphics / noborder;
proc sgplot data=DFac;
ods region x=3in y=0in width=3in height=3in;
title 'Faculty Race';
hbar frace / categoryorder=respdesc datalabel;
xaxis label="Count";
yaxis label="Ethnicity" display=(nolabel noticks) valueattrs=(color=black family=arial size=6pt weight=bold ) VALUESHALIGN=left;
run;
quit;
proc sgpie data=DFac;
ods region x=0 y=22% width=45% height=20%;
title 'Faculty Sex';
styleattrs datacolors=(grey black bib);
donut fsex / holevalue /*holelabel='Count'*/ ringsize=0.5;
run;
quit;
ods layout end;
ods pdf close;
If for no other reason then following code, it is not a good idea to place statements related to external items such as ODS LAYOUT or REGION information in the middle of a procedure like SGPLOT.
Please post a picture of what you are seeing.
I am certainly not an expert on the PDF destination, but try the following code to see if it give output close to what you expect:
data DFac;
call streaminit(1);
length frace $20 fsex $13;
array race [6] $20 ('White, Not Hispanic', 'Black, Not Hispanic', 'Asian', 'Not Specified', 'American Indian', 'Hawaiian');
array sex [3] $13 ('Male', 'Female', 'Not Specified');
do i = 1 to 1200;
k = rand("table", 0.80, 0.10, 0.07, 0.01, 0.01, 0.01);
frace = race[ k ];
k = rand("table", 0.47, 0.48, 0.05);
fsex = sex[ k ];
output;
end;
keep i frace fsex;
run;
ods html close;
ods graphics / noborder;
title "Uni";
ods pdf file="Year.pdf" ;
options orientation=portrait papersize=letter topmargin=0.001in bottommargin=0.001in leftmargin=0.001in rightmargin=0.001in;
ods layout Start;
ods region x=3in y=0in width=3in height=3in;
title 'Faculty Race';
proc sgplot data=DFac;
hbar frace / categoryorder=respdesc datalabel;
xaxis label="Count";
yaxis label="Ethnicity" display=(nolabel noticks) valueattrs=(color=black family=arial size=6pt weight=bold ) VALUESHALIGN=left;
run;
ods region x=0in y=0in width=3in height=3in;
title 'Faculty Sex';
proc sgpie data=DFac;
styleattrs datacolors=(grey black bib);
donut fsex / holevalue /*holelabel='Count'*/ ringsize=0.5;
run;
ods layout end;
ods pdf close;
The most likely explanation for the misaligned labels is bad data. Since I don't have your data, I cannot test, but you ought to be able to use PROC FREQ to see whether the categories for race are correctly formatted.
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!
Check out this tutorial series to learn how to build your own steps in SAS Studio.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.