2015年12月7日月曜日

REPORTプロシジャ入門6:要約行の追加【BREAK, RBREAK】



BREAK・RBREAKを使って、合計や平均などの要約行を追加する事ができます。

まずは構文から。




  要約行を追加  【RBREAKステートメント】


※ 黄色部分が要約行





















ざっくり解説

  RBREAK  BEFORE   /  SUMMARIZE ;

先頭に要約行を追加します。
「RBREAK  AFTER」 だと末尾に追加されます。


  DEFINE  変数2  /  ANALYSIS  統計量 ;

要約値の計算は、ANALYSISオプション等の「要約統計量の出力」が設定されたものに対して行われます。

📝
ANALYSISオプションは予期せぬ結果になりやすいので以下記事も要確認。
REPORTプロシジャ入門10:数値変数の落とし穴




 グループ毎に要約行を追加  【BREAKステートメント】























ざっくり解説

  DEFINE  変数1 / ORDER ;

まず変数1のグループ毎に要約行を追加するため、ORDERオプションで並び替えておく。

📝
ORDERオプションは欠損値のオブザベーションが除外されたり、並び順がおかしくなる注意点もあるので以下記事も要参照。
  BREAK  BEFORE  変数1  /  SUMMARIZE ;

変数1のグループ先頭に要約行を追加します。
「BREAK  AFTER  変数1」 だとグループ末尾に追加されます。


  DEFINE  変数2  /  ANALYSIS  統計量 ;

要約値の計算は、ANALYSISオプション等の「要約統計量の出力」が設定されたものに対して行われます。

📝
こちらも以下記事の通り、ANALYSISオプションが予期せぬ結果になりやすいので注意。

具体例

*** サンプルデータ ;
data DT1;
input A$ B @@;
cards;
aaa 10 aaa 20 aaa 30 bbb 40 bbb 50 bbb 60
;
 A  
 B  
 aaa
 10 
 aaa 
 20 
 aaa
 30
 bbb 
 40 
 bbb
 50
 bbb
 60

*** グループ毎に要約行を追加 ;
proc report data=DT1 nowd spanrows;
   column A B;
   define A / order;
   define B / analysis sum;
   break after A / summarize;
run;

分かり辛いですが、4行目と8行目が要約行です。


次回紹介予定のCOMPUTEステートメントを使えば以下のように要約行に「Total」って文字を入れて分かり易くすることも出来ます。

proc report data=DT1 nowd spanrows;
   column A B;
   define A / order;
   define B / analysis sum;
   break after A / summarize;
   compute after A;
        A="Total";
   endcomp;
run;


📝
この方法の注意点は、length以上の値を入れると文字切れしてしまうところ。
今回の例だと変数Aのlengthは$8なので「A="Total"」は入るけど、「A="Total (Summary Line)"」とかってすると、$8をオーバーしているので先頭8バイトで文字切れして「"Total (S"」と出力されます。



おまけ

PAGEオプションを指定するとグループ毎に改ページを挿入できます。

proc report data=DT1 nowd spanrows;
   column A B;
   define A / order;
   define B / analysis sum;
   break after A / page;
run;




REPORTプロシジャ入門記事一覧

1.基本構文【COLUMN, DEFINE】
2.ヘッダーの設定
3.並べ替え・グループ化【ORDER, GROUP】
4.集計【ANALYSIS】
5.転置集計【ACROSS】
6.要約行の追加【BREAK, RBREAK】
7.計算項目の追加【COMPUTE】
8.書式の設定【STYLE=】
9.特定セルの書式設定【CALL DEFINE】
10.数値変数の落とし穴

0 件のコメント:

コメントを投稿