在 BOXPLOTPARAM (SAS GTL) 中分离数据

Separating Data in BOXPLOTPARAM (SAS GTL)

我已经汇总了要绘制为盒须图的数据。我为某些 类 添加了一个“异常值”点。我想要 2 个单独的地块,一个有异常值,一个没有。

这是我得到的:

data test;
input _stat_ $ _label_ $ col1 has_outlier;
datalines;
Max    A 2.1837546442 0
Mean   A 0            0
Median A 0.0101415946 0
Min    A -2.698021137 0
Q1     A -0.656874482 0
Q3     A 0.6635898047 0
Max    B 2.2346071965 1
Mean   B 0            1
Median B -0.025621533 1
Min    B -2.380132327 1
Q1     B -0.658781626 1
Q3     B 0.7248025307 1
Outlier B -2.120639115 1
Max    C 1.9904289904 0
Mean   C 0            0
Median C 0.0164299847 0
Min    C -2.032578831 0
Q1     C -0.454702942 0
Q3     C 0.7259160175 0
;



proc template;
  define statgraph boxplotparm1;
    begingraph;
      layout datapanel classvars=(has_outlier) / columns=2 rowdatarange=union;
          layout prototype / cycleattrs=true;
           boxplotparm x=_label_ y=col1 stat=_stat_ /
             datalabel=datalabel spread=true  dataskin=sheen outlierattrs=(color=red symbol=Asterisk);     
          endlayout;
      endlayout;
    endgraph;
  end;
run;
 
/* Generate the plot. */
proc sgrender data=test template=boxplotparm1;
run;

制作这个:

我想从没有箱形图的图表中删除 类。所以“No Outlier”组应该只显示“A”和“C”,“Outlier”组应该只显示“B”。

我想你会用控制 X 轴的 COLUMNDATARANGE=UNION 得到你想要的。 UNIONALL 是默认值,并指示它在所有图形中具有一致的 X 轴; UNION 指示它不要。

不过,如果你走这条路,你可能没有一个漂亮的图表,因为我怀疑要获得正确的宽度将是一个挑战。

proc template;
  define statgraph boxplotparm1;
    begingraph;
      layout datapanel classvars=(has_outlier) / columns=2 rowdatarange=union columndatarange=union;
          layout prototype / cycleattrs=true;
           boxplotparm x=_label_ y=col1 stat=_stat_ /
             datalabel=datalabel spread=true  
             dataskin=sheen outlierattrs=(color=red symbol=Asterisk)
             ;     
          endlayout;
      endlayout;
    endgraph;
  end;
run;