2017年5月23日火曜日

REPORTプロシジャ入門10:数値変数の落とし穴



前提知識として、まず以下リンク記事をご覧ください。
REPORTプロシジャ入門4:集計【ANALYSIS】




では、落とし穴の例を見ていきましょう。


落とし穴の例

まず、データセットSASHELP.CLASS の NAME, AGE をREPORTプロシジャで出力してみます。

* 例① ;
proc report data=SASHELP.CLASS nowd;
   column NAME AGE;
   define NAME / "名前";
   define AGE  / "年齢";
run;



まぁ、これは特におかしなところはないですね。
では以下のように年齢だけ出力してみるとどうでしょうか?

* 例② ;
proc report data=SASHELP.CLASS nowd;
   column AGE;
   define AGE  / "年齢";
run;


「あれ?1行しか出力されていないうえ、年齢「253」てなんだよ!」って感じですよね。



解説

実は、REPORTプロシジャに指定した ”数値変数” は、以下青字のように「analysis sum」オプションをSASが裏で勝手につけて実行しています。

proc report data=SASHELP.CLASS nowd;
   column AGE;
   define AGE  / analysis sum "年齢";
run;

つまり、AGEを合計して「253」という出力になってしまったわけですね。


以下のように「display」オプションを明示的につければ、この勝手な挙動を制御できます。
proc report data=SASHELP.CLASS nowd;
   column AGE;
   define AGE  / display "年齢";
run;




ちなみに最初の例①の場合は、SASが裏で以下青字のように判断して実行します。

proc report data=SASHELP.CLASS nowd;
   column NAME AGE;
   define NAME / display "名前";
   define AGE    / analysis sum "年齢";
run;

文字変数の場合は特にこちらで明示しない場合「display」が勝手につくわけです。

つまり挙動として、数値変数 AGE だけだと合計してしまうけど、文字変数 NAME を「display」オプションでそのまま表示するようにしているから、AGE も合計されなくて済んでるっていう仕組みです。



9.特定セルの書式設定【CALL DEFINE】
10:数値変数の落とし穴

0 件のコメント:

コメントを投稿