Study SAS

統計解析ソフトウェアSASについて学習したことのまとめやSAS認定試験対策など

SAS Base Programmer 練習問題4

data work.totalsales (keep = monthsales{12} );
    set work.monthlysales (keep = year product sales);
    array monthsales {12} ;
    do i=1 to 12;
        monthsales{i} = sales;
    end;
run;

このプログラムをサブミットするとどのような結果になるか。
work.monthlysalesは5年間分のデータ5オブザーベーションが格納されているとする

A. データエラー
B. シンタックスエラー
C. 警告が出るがwork.totalsalesデータセットが作られる
D. エラーや警告は出ず、work.totalsalesデータセットが作られる

出典はこちら


答え: B (要反転)

arrayに対してkeepやdropを指定することはできない。"無効な変数名"のシンタックスエラーとなる。
この場合、keepを指定したい場合は以下のようにする。

data work.totalsales (keep = monthsales1-monthsales12 );
    set work.monthlysales (keep = year product sales);
    array monthsales {12} ;
    do i=1 to 12;
        monthsales{i} = sales;
    end;
run;

もしくは、

data work.totalsales (drop = i year product sales);
    set work.monthlysales (keep = year product sales);
    array monthsales {12} ;
    do i=1 to 12;
        monthsales{i} = sales;
    end;
run;

のようにdropを使う