Study SAS

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

SAS Base Programmer 練習問題20

次のSASプログラムをサブミットする

data work.flights;
    destination = 'CPH';
    select(destination);
        when('LHR') city = 'London';
        when('CPH') city = 'Copenhagen';
        otherwise;
    end;
run;

変数CITYの値は以下のどれか

A. London
B. Copenh
C. Copenhagen
D. '' (文字データの欠損値)

出典はこちら


答え: B (要反転)

lengthステートメントで定義していない場合、文字変数の長さは最初に代入の処理が記述された文字列の長さとなる。ポイントは実行される、されないに関係なく、コード的に上の行に書かれているものが優先される。したがって city = 'London'; の方が先に出てくるため、cityの長さは6バイトとなり、'Copenhagen'の先頭6文字の'Copenh'がcityに格納されることになる。

仮に、さらに上の行で10文字以上の文字列をcityに割り当てるコードが書かれていたとしたら、

data work.flights;
    destination = 'CPH';
    select(destination);
        when('RDJ') city = 'Rio de Janeiro';
        when('LHR') city = 'London';
        when('CPH') city = 'Copenhagen';
        otherwise;
    end;
run;

cityの値は'Copenhagen'となる。