2015年11月10日火曜日

REPORTプロシジャ入門2:ヘッダーの設定


ヘッダーを自分なりにカスタマイズする方法を紹介。



サンプルデータ

data DT1;
input NO$ A B;
cards;
001 1 4
002 2 5
003 3 6
;



【その1】 ヘッダーの指定

proc report data=DT1 nowd ;
   column NO A B;
   define  NO /  display  "項目1" ;
   define  A    /  display  "項目2" ;
   define  B    /  display  "項目3" ;
run;

(※ヘッダーを指定しないと、変数ラベルまたは変数名が表示されます)



【その2】 ヘッダーを改行する

proc report data=DT1 nowd split="#";
   column NO A B;
   define  NO /  display  "項目#1" ;
   define  A   /  display  "項目#2" ;
   define  B   /  display  "項目#3" ;
run;

  • SPLIT="半角文字"」で指定した半角文字をヘッダーの改行用文字に設定できます。
  • SPLIT=を指定しないと、デフォルトでスラッシュ「/」が改行用文字になります。
  • ODS出力の種類(LISTING, HTML, RTFなど)によって、ヘッダー部分のみに機能したり、データ部分にも機能したりと挙動が異なるので、各自で挙動確認した方が良いです。


【その3】 ヘッダーを2段にする

proc report data=DT1 nowd;
   column  NO  ("ああ" A B) ;
   define  NO /  display ;
   define  A   /  display ;
   define  B   /  display ;
run;


構文
COLUMN   ( "ヘッダー"   変数名1  変数名2 ・・・ ) ;

  • まず2段にしたい部分をカッコで囲みます。
  • ヘッダーを指定することで1段追加することができ、
  • 変数名を指定することで、次の段に変数を並べる事ができます。


応用
以下のように、カッコをネストする事も可能。
proc report data=DT1 nowd;
   column  NO  ("ああ"  ("いい" A)   ("うう" B)  ) ;
   define  NO /  display ;
   define  A   /  display ;
   define  B   /  display ;
run;


さらに書式などを細かく設定するにはSTYLE=オプションというものがあり、別記事で紹介予定。



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

2.ヘッダーの設定
3.並べ替え・グループ化【ORDER, GROUP】

5 件のコメント:

  1. すみません、ちょっと腑に落ちないことがあって、知っていたら教えてほしいのですが。

    9.4M3で以下を実行すると

    data Q1;
    A=1;B=2;C=3;D=4;E=5;
    run;

    options nocenter;
    ods rtf;
    proc report data=Q1 nowd;
    column A ("2段" B C) D E;
    define A/display style={cellwidth=100};
    define B/display style={cellwidth=100};
    define C/display style={cellwidth=100};
    define D/display style={cellwidth=100};
    define E/display style={cellwidth=100};
    run;
    ods rtf close;

    「WARNING: スパンのヘッダーまたはフッターでのOUTPUTWIDTH=の使用は期待された結果を得られません。従来の用法には、データカラムのセルだけにoutputwidthを指定してください」が
    でるようになりました。

    ods rtf;
    proc report data=Q1 nowd;
    column A ("2段" B C) ("" D E);
    define A/display style={cellwidth=100};
    define B/display style={cellwidth=100};
    define C/display style={cellwidth=100};
    define D/display style={cellwidth=100};
    define E/display style={cellwidth=100};
    run;
    ods rtf close;

    とするか

    ods rtf;
    proc report data=Q1 nowd;
    column A ("2段" B C) D E;
    define A/display style(column)={cellwidth=100};
    define B/display style(column)={cellwidth=100};
    define C/display style(column)={cellwidth=100};
    define D/display style(column)={cellwidth=100};
    define E/display style(column)={cellwidth=100};
    run;
    ods rtf close;

    で、でなくなることはわかったのですが、このWARNINGはどういう理屈ででちゃってるんでしょうか?style()で明示しないとheaderとcolumn両方にかかるので、段組したheaderにcellwidthがかかってしまいということなんでしょうが、段組している箇所の後に2変数以上、columnがあるときのみでるような気がして、意味がわかりません。

    返信削除
    返信
    1. うーむ、これは謎ですね。。

      私もSASYAMAさんが仰る通り「style()で明示しないとheaderとcolumn両方にかかる」というくらいの認識しか持ってなく、
      「段組している箇所の後に2変数以上、columnがあるときのみ」っていうのは初めて知りました。

      色々なデータパターンで検証してみて、WARNINGが出る場合と出ない場合は見えてきたんですが、それが何故なのかは見えませんでした。


      例えば以下のようにA~Fまでの変数があって、それを最後のFだけ「style(column)=」を指定するとWARNINGが出なくなります。

      column A ("2" B C) D E F;
      define A / display style={cellwidth=100};
      define B / display style={cellwidth=100};
      define C / display style={cellwidth=100};
      define D / display style={cellwidth=100};
      define E / display style={cellwidth=100};
      define F / display style(column)={cellwidth=100};

      段組の後に出力している変数の状態が、このWARNINGに直接的または間接的に影響している?って事なんでしょうかね。

      何れにしろ段組しててstyleステートメント使う時は column, header を指定しといたほうがよさそうですね。

      勉強になりました。また何か分かったら教えてください。

      削除
  2. はじめまして、最近SASを始めたものです。
    このブログにはいつもお世話になっております、有難うございます。
    基礎的なご質問で申し訳ないのですが、reportプロシジャを使用した際、デフォルトで変数名にラベルが適用されてしまうのですが、これをもとの変数名で表示する方法はありますでしょうか?

    もし知っている方がいらっしゃれば、お答えいただければ幸いです。

    返信削除
    返信
    1. shiniさん、はじめまして。コメント有難うございます。
      以下でどうでしょうか。

      options nolabel;
      proc report ・・・・・・; run;
      options label;

      まず、REPORTプロシジャ自体には、変数ラベルを無効にするオプションがないようです。
      なので、システムオプションをいじる必要があります。

      options nolabel;

      で、SASプロシジャで変数ラベルを使用しないように設定します。
      このシステムオプションはreportプロシジャだけでなく、他のSASプロシジャにも適用されてしまいます。
      他のプロシジャで挙動が変わるのはマズイので、

      options label;

      で設定を戻しています。

      削除
    2. matsu aさん

      質問にお答えいただきまして、ありがとうございます。
      なるほど、optionsステートメントで制御すればよかったのですね。

      書籍などで調べても思いつかなかったのでとても有り難いです。有難うございました。
      始めたばかりですが、引き続き勉強していこうと思います!

      削除