BOXPLOTプロシジャを利用したブロック別の箱ひげ図の作成の方法

[OS]ALL
[リリース] 8.1 8.2
[キーワード] BOXPLOT 箱ひげ図

[質問]

BOXPLOTプロシジャを利用して下記のプログラムのようにブロック群ごとの箱ひげ図を描こうとしたのですが、マニュアルの例のようにブロック群2の表示がうまくいきません。

プログラム例


 data data1;
 input block group y;
cards;
1 1 1
1 1 2
1 2 3
1 2 4
2 1 5
2 1 6
2 2 7
2 2 8
;

/**変数GROUPでソート**/
 proc sort data=data1;
   by group;
 run;

/**BOXPLOTプロシジャの実行**/
proc boxplot data=data1;
 plot y*group (block);
 run;
quit;

[回答]

この問題は、BOXPLOTプロシジャでのBLOCK変数の扱い方に依存した問題となります。 以下に例をあげながらご説明します。

プログラムは、すべて次のプログラムを指定しています。


   proc boxplot data=data1;
     plot y*group (block);
   run;


例1) 3つの変数とも数値変数の場合

      (SORT後)

  BLOCK  GROUP  Y
 ----------------------
    1        1        1
      1        1        2
      2        1        5
      2        1        6
     1        2        3
     1        2        4
     2        2        7
     2        2        8

* Block変数となる変数BLOCKがソートされていませんので、描かれる箱ひげ図は、以下のようになってしまいます。

(うまく昇順、降順にならんでいる部分のみ作成するグラフに利用します)
(ERRORメッセージは出力されません)

作成例 図1

fig1

例2) データを変数BLOCK変数GROUPの順に並びかえた場合

プログラム例


 proc sort data=data1;
   by block group;
 run;

  BLOCK  GROUP   Y
  ----------------------
     1         1       1
     1         1       2
     1         2       3
     1         2       4
     2         1       5
     2         1       6
     2         2       7
     2         2       8

GROUP変数がソートされていないので、上記の場合は下記のメッセージが出力され、 グラフは作成されません。

   ERROR: The values of the subgroup variable group are not sorted in
     increasing order in the data set ・・・

マニュアルのサンプルプログラムのように、ブロック別の層別箱ひげ図を作成するには、 GROUP変数とBLOCK変数の並び方を調整する必要があります。

* BOXPLOTプロシジャでは、GROUP変数に文字型の変数が指定されている場合には、 データセットの並び順に依存せず処理を行うことができます。

今回の場合の回避策としまして、データの並び順を変更し、 GROUP変数を数値型から文字型に変更することで、ご希望のグラフを作成できます。

プログラム例


/**データの並びかえ**/
proc sort data=data1;
 by block group;
run;

/**データステップで数値を文字に変更します**/
 data data2;
   set data1;
   chargroup=put(group, 1.);
 run;

/**BOXPLOTプロシジャの実行**/
proc boxplot data=data2;
  plot y*chargroup (block);
run;
quit;
*********************;

作成例 図2

fig2

数値変数のみでブロック別のグラフを作成する際には、以下のように、 BLOCK変数とGROUP変数の値をデータが昇順になるように変更します。

例3)


   BLOCK    GROUP    Y
  ----------------------
       1       1      1
       1       1      2 
       1       2      3
       1       2      4
       2       3      5
       2       3      6
       2       4      7
       2       4      8

作成例 図3

fig3