proc formatのpictureステートメントの話①

う~ん、proc formatのpictureステートメントについて、、はっきり言って僕もそんなに得意じゃないので、ずっと意識的に避けてきました。そのうち mastuさんやSASNamiさんが、記事だしそうだから、それ見て勉強しよ~と思っていました。

ただ、やっぱりそういう後ろ向きな姿勢は良くないですね。苦手克服のために紹介します。
そのため、もしかしたら、間違いがあるかもしれないので、指摘してください。

pictureステートメントは、かなり自由度の高い、出力形式を創造するステートメントです。
おなじproc formatでも、valueステートメントは、この値(範囲)ならこの文字を表示みたいに、決め打ちチックですが、pictureは違います。

いいから、とっとと例をだせ!という声が聞こえてきそうなので、そうします。

data Q1;
 do X=1 to 20 by 4;
  output;
 end;
run;









例えば、値が15までは入りうる数字なので、そのまま表示するが、15を超えたら異常値というシチュエーションの場合、次のようにフォーマットを定義できます。


proc format; 
 picture FT_1_
 1-15 ='99'
 other= '異常値じゃない?';
run;


で、これを実際当ててみると

data A1;
 set Q1;
 format X FT_1_.;
run;









はい、注目すべきは一ケタの数字はゼロパティング(0がついて二ケタ表示)されていることですね。
pictureステートメントで'99'とすると2ゼロパティングして2ケタ数字でデータの値を表示するということになります。'999'とすれば当然「001」のようになります。

いちいちvalue 1='01' 2='02' 3='03'・・・なんてことをしなくていいわけです。

ゼロパティングなんていらねーよ!という場合は次のようにします。

proc format; 
 picture FT_2_
 1-15 ='00'
 other= '異常値じゃない?';
run;

で当ててみると

data A2;
 set Q1;
 format X FT_2_.;
run;











はい、15以下の値は元のまま表示されます。


さて、このままだと15を超える値は全部「異常値じゃない?」となってしまい、フォーマットを解除しないとデータの値がわかりません。

ので、以下のようにフォーマットを作ります。

proc format; 
 picture FT_3_
 1-15 ='00'
 other= '00は異常値じゃない?';
run;

で、当ててみると














00は異常値じゃない?としたことによって、00の部分に実際の
データの値が入ります。凄くないですか?

でも、まだまだこんなもんじゃないです。

とりあえず今回はここまで。




0 件のコメント:

コメントを投稿