Study SAS

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

SAS Base Programmer 練習問題23

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

data work.staff;
    JobCategory = 'FA';
    JobLevel = '1';
    Jobcategory = Jobcategory || JobLevel;
run;

出力データセットの変数JOBCATEGORYの値は以下のどれか

A. FA
B. FA1
C. FA 1
D. '' (文字データの欠損値)

出典はこちら


答え: A (要反転)

||は文字列同士を結合する演算子だが、JobCategoryは JobCategory = 'FA'; とした時点で長さは2バイトとなる。そのため、結合しても文字列は'FA'のままとなる。

以下のようにJobCategoryの長さを大きくすれば解決するように思えるが、

data work.staff;
    length JobCategory $ 8;
    JobCategory = 'FA';
    JobLevel = '1';
    Jobcategory = Jobcategory || JobLevel;
run;

このコードの実行結果のJobCategoryもFAとなる。

結合結果を別の変数Jobcategory2に代入してみると

data work.staff;
    length JobCategory $ 8;
    JobCategory = 'FA';
    JobLevel = '1';
    Jobcategory2 = Jobcategory || JobLevel;
run;
Jobcategory JobLevel Jobcategory2
FA 1 FA   1

FAの末尾に空白文字が6文字分入っているためであることが分かる。

FA1の結果を得るためには、以下のようにtrimを使って空白を除去する必要がある。

data work.staff;
    length JobCategory $ 8;
    JobCategory = 'FA';
    JobLevel = '1';
    Jobcategory = trim(Jobcategory) || JobLevel;
run;