2017年10月3日火曜日

【PROC REPORT】1つの項目に複数のCALL DEFINEを定義したい



「CALL DEFINEの重ね着って出来ないんですか?」って質問をたまにいただきます。


どういう事かと言うと、以下の例をご覧ください。

proc report data=SASHELP.CLASS nowd;
    column NAME AGE ;
    compute AGE;
       if AGE.sum > 13 then call define( "name", "style", "style=[color=blue]" );
       if AGE.sum > 14 then call define( "name", "style", "style=[background=yellow]" );
    endcomp;
run;


CALL DEFINEで、

① AGE>13の時、変数NAMEの値を青色にする
② AGE>14の時、変数NAMEの背景色を黄色にする

という事をしてます。

よくみると、ジャネットさんは値を青にした上で、背景色を黄色にしたかったんですが、青くなってません。


実はCALL DEFINEは、デフォルトだとひとつの項目に対して、最後に定義したSTYLEしか適用されません。


そこで、小技。
以下のように「STYLE/MERGE」とすれば、STYLEを上書きじゃなくてMERGE(結合)してくれます。

proc report data=SASHELP.CLASS nowd;
    column NAME AGE ;
    compute AGE;
       if AGE.sum > 13 then call define( "name", "style", "style=[color=blue]" );
       if AGE.sum > 14 then call define( "name", "style/merge", "style=[background=yellow]" );
    endcomp;
run;


ちゃんとジャネットさんが青くなってますね。

0 件のコメント:

コメントを投稿