BookmarkSubscribeRSS Feed
romangelzhaeuse
Fluorite | Level 6

Hi,

 

The following code:

 

ods graphics off;
proc sort data=Simon4 out=Simon4;
    by Geschlecht;
run;

proc boxplot data=Simon4;
    plot (IL10A IL10B IL10C IL10D)*Geschlecht/
        HEIGHT=2 boxstyle=SCHEMATICID cboxfill=BIG cboxes=black;
    insetgroup mean /
        header = 'Mittelwerte jeweils zur Gruppe darunter';
run;

 

Gives me the following image:

boxplots.png

How can I achieve that the numbers giving the means (e.g. 33.7385) are above the bars and not justified to the right?

 

Thanks in advance

2 REPLIES 2
PGStats
Opal | Level 21

If you have SAS 9.4M5 or later, you should use sgplot VBOX statement with DISPLAYSTATS=(MEAN). 

PG
FreelanceReinh
Jade | Level 19

Hi @romangelzhaeuse,

 

If all else fails, you can use the annotate feature to mask the existing inset values (with white rectangles) and write the same values where you want:

/* Create test data for demonstration */

data have;
do i=1 to 100;
  e=rannor(1971);
  do s=-1, 1;
    IL10A=33.7385 +20*s*e; Geschlecht='m'; output;
    IL10A=36.83532+20*s*e; Geschlecht='w'; output;
  end;
end;
run;

proc sort data=have;
  by Geschlecht;
run;

/* Compute mean values */

proc summary data=have;
by Geschlecht;
var il10a;
output out=means mean=mean;
run;

proc transpose data=means out=mw_means(drop=_:) prefix=mean_;
id Geschlecht;
var mean;
run;

/* Create Annotate dataset */

%annomac;

data anno;
length function color $8 style text $20;
set mw_means;
/* Mask the original INSETGROUP values with white
   rectangles and write them at the desired position. */
when='A'; xsys='1'; ysys='5';
%bar(30,95.7,49.5,97.3,white,0,s)                 /* Coordinates (30,   */
%label(30,96,put(mean_m,best8.),black,0,0,1,,B)   /* 95.7, 49.5, etc.)  */
%bar(80,95.7,99.5,97.3,white,0,s)                 /* will likely need   */
%label(69.5,96,put(mean_w,best8.),black,0,0,1,,B) /* to be adapted.     */
run;

/* Produce box plot with "centered" inset values */

proc boxplot data=have anno=anno;
    plot IL10A*Geschlecht/
        HEIGHT=2 boxstyle=SCHEMATICID cboxfill=BIG cboxes=black;
    insetgroup mean /
        header = 'Mittelwerte jeweils zur Gruppe darunter';
run;

Result (depending on output device, HSIZE and VSIZE graphics options):

boxplot.png

hackathon24-white-horiz.png

The 2025 SAS Hackathon has begun!

It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.

Latest Updates

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
  • 1212 views
  • 0 likes
  • 3 in conversation