SAS SGPLOT VBOX: отображение среднего и медианы на блочной диаграмме

Я пытаюсь сделать коробку с помощью SGPLOT в SAS. Я хотел бы использовать SGPLOT с оператором VBOX, чтобы отметить среднее и медиану на графике для каждого поля.

Ниже приведен набор данных, который я создал в качестве примера. Может ли кто-нибудь помочь мне в этом?

введите здесь описание изображения

/* Set the graphics environment */                                                                                                     
goptions reset=all cback=white border htitle=12pt htext=10pt;                                                                           

/* Create a sample data set to plot */                                                                                                 
data one(drop=i);                                                                                                                       
   do i=1 to 10;                                                                                                                        
      do xvar=1 to 9 by 2;                                                                                                              
         yvar=ranuni(0)*100;                                                                                                            
         output;                                                                                                                        
      end;                                                                                                                              
   end;                                                                                                                                 
run;                                                                                                                                    

/* Sort the data by XVAR */                                                                                                            
proc sort data=one;                                                                                                                     
   by xvar;                                                                                                                             
run;                                                                                                                                    

/* Use the UNIVARIATE procedure to determine */                                                                                         
/* the mean and median values */                                                                                                       
proc univariate data=one noprint;                                                                                                       
   var yvar;                                                                                                                            
   by xvar;                                                                                                                             
   output mean=mean median=median out=stat;                                                                                             
run;                                                                                                                                    

/* Merge the mean and median values back */                                                                                             
/* into the original data set by XVAR    */                                                                                             
data all;                                                                                                                               
   merge one stat;                                                                                                                      
   by xvar;                                                                                                                             
run;

person qifengwu    schedule 28.02.2019    source источник
comment
Используйте подход здесь, за исключением того, что вместо SERIES используйте SCATTER, чтобы получить только баллы: blogs.sas.com/content/graphicallyspeaking/2015/12/04/   -  person Reeza    schedule 28.02.2019


Ответы (1)


Используйте VBOX для блочной диаграммы, SCATTER для среднего/медианы.

/*--Compute the Mean and Median by sex--*/
proc means data=sashelp.heart;
  class deathcause;
  var cholesterol;
  output out=heart(where=(_type_ > 0) keep=deathcause mean median  _type_)
    mean = mean
        median = median;
  run;

/*--Merge the data--*/
data heart2;
  keep deathcause mean median cholesterol;
  set sashelp.heart heart;
run; 
proc print data=heart2;run;

/*--Box plot with connect and group colors--*/
ods graphics / reset ANTIALIASMAX=5300 width=5in height=3in imagename='Box_Group_Multi_Connect';
title 'Cholesterol by Cause of Death';
proc sgplot data=heart2 noautolegend noborder;
  vbox cholesterol / category=deathcause group=deathcause;
  scatter x=deathcause y=mean / name='mean' legendlabel='Mean' markerattrs=(color=green);
  scatter x=deathcause y=median / name='median' legendlabel='Median' markerattrs=(color=red);
  keylegend "mean" "median" / linelength=32 location=inside across=1 position=topright;
  xaxis display=(nolabel);
run;

РЕДАКТИРОВАТЬ: В операторе SGPLOT и VBOX вы также можете отображать медиану в виде линии и среднее значение в виде точки на блочной диаграмме без каких-либо других ручных расчетов заранее. Это доступно, начиная с SAS 9.4 M5+.

ods graphics / reset ANTIALIASMAX=5300 width=5in height=3in imagename='Box_Group';
title 'Cholesterol by Cause of Death';
proc sgplot data=sashelp.heart noborder;
  vbox cholesterol / category=deathcause 
                    displaystats=(median mean) 
                    meanattrs=(color=red) 
                    medianattrs=(color=green);
  *xaxis display=(nolabel);
run;
person Reeza    schedule 28.02.2019
comment
Спасибо! @Reeza, но кажется, что displaystats не работает, я хотел бы создать Keylegend для среднего и медианного. - person qifengwu; 28.02.2019
comment
Не уверен, что вы имеете в виду, можете ли вы отредактировать свой вопрос и включить свой код, и я посмотрю на него? - person Reeza; 28.02.2019
comment
И какую версию SAS вы используете, если это более старая версия, некоторые из этих параметров могут не применяться. - person Reeza; 28.02.2019
comment
@qifengwu вы не редактируете мой ответ, вы редактируете исходный вопрос. - person Reeza; 01.03.2019
comment
@qifengwu вам нужен SAS 9.4 M5, чтобы статистика дисплея была доступна. В противном случае вы можете использовать предыдущий ответ. - person Reeza; 01.03.2019