前提知識として、まず以下リンク記事をご覧ください。
REPORTプロシジャ入門4:集計【ANALYSIS】
では、落とし穴の例を見ていきましょう。
データセットSASHELP.CLASS の NAME, AGE をREPORTプロシジャで出力してみます。
まぁ、これは特におかしなところはないですね。
では以下のように年齢だけ出力してみるとどうでしょうか?
* 例② ;
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 も合計されなくて済んでるっていう仕組みです。
(AGE が「全ての行」の合計ではなく、行ごとに「その行の1つの数値だけ」で合計する、という意味のない動きになっていて、結果的に格納値そのままの値になる)
9.特定セルの書式設定【CALL DEFINE】
10:数値変数の落とし穴
10:数値変数の落とし穴
0 件のコメント:
コメントを投稿