Proc Reportとかのスタイルの値はフォーマットで返すようにしといてもいけるよって話

なんかしらアウトプット出す際に
値に応じて、レポートの色を変えたり、罫線の種類変えたり、太字にしたいってことありますよね。
例えばsashelp.classのデータセットで
変数WEIGTHが80以下の場合、フォントカラーを「緑」、80以上100未満の場合、「青」、
100以上の場合「赤」にしろって言われたらどうします?

ちなみに余談ですが、SASHELP.CLASSの単位はポンドなんですね。
デフォルトで変数ラベルをださない設定にしていたので、
当初、極度に肥満の子達のデータだと思ってました。
身長がインチの時点で気づけよって話ですが。

さらにさらに余談ですが9.4のM3からデータセット開いて、「表示」タブで
「列の名前」か「列のラベル」をチェックで選択した内容が、ずっと記憶されるようになりましたよ。

いずれ以下の記事とかは、若い人が読んだ時に、このじじい何書いてんだ?って思われるんだろうなぁ。

[SASデータセットを開いた時にラベル名ではなく変数名を表示するのをデフォルト設定にする]
http://sas-tumesas.blogspot.jp/2013/09/sas_20.html

はい、本筋に戻します。
たとえばproc reportで、以下のように書けます。

proc report data=SASHELP.CLASS nowd;
   column  NAME WEIGHT;
   define  NAME   /display;
   define  WEIGHT/ display;
    compute WEIGHT;
       if .<WEIGHT< 80        then call define( _COL_, "style", "style=[color=green]" );
       if 80<=WEIGHT< 100 then call define( _COL_, "style", "style=[color=blue]" );
       if 100<=WEIGHT         then call define( _COL_, "style", "style=[color=red]" );
    endcomp;
quit;



























が、しかし、style指定の内容について、実はフォーマットを指定することができるんですね。すると、値にフォーマットが掛かった結果の値が、スタイルの引数になるわけです。

つまり

proc format;
 value wight_f
  low-<80="green"
  80-<100="blue"
  100-high="red"
;
run;

proc report data=SASHELP.CLASS nowd;
   column  NAME WEIGHT;
   define  NAME   /display;
   define  WEIGHT/ style=[color= wight_f.];
quit;

で、結果は同じとなるわけです。

だもんで、この程度であれば
proc printなんかでもいいわけです。

proc print data=sashelp.class;
 var name;
 var weight / style={foreground=wight_f.};
run;


色に限らず、なんでもできるので、カテゴリ幅がよくよく変わる動的スタイルの場合
フォーマットで管理した方が楽かもしれんですね。





0 件のコメント:

コメントを投稿