【SAS/プログラミング】length,label,format,Attrib。変数の定義って大事ですよねぇ。
今回は定義の部分、かつ重要な箇所となります。
まとめて一気にnoteします!
<ステートメント>
length・・・長さ
label・・・ラベル名
format・・・フォーマット名
Attrib・・・長さ、ラベル名、フォーマット名をまとめて指定。
<program code 1 - length,label,format編>
data [出力データセット];
set [入力データセット];
length [変数1] 8. [変数2] $8.;
label [変数1]="ラベル名1" [変数2]="ラベル名2";
format [変数1] best. [変数2] yymmdd8.;
run;
複数変数の定義がある場合は、半角ブランクで間を開けて定義しましょう。
文字値変数の場合、長さは数字の前が
上記のlength,formatは一例です。数字やフォーマット名は適宜変更です。
data~run;の間でしたらlength,label,formatはどこに定義しても問題ありません。
ただ、定義ですのでなるべく上位のところに記載してあげると
見やすいでしょう!
<program code 2 - attrib編>
data [出力データセット];
set [入力データセット];
attrib
[変数1] length=8. label="ラベル名" format=best.
[変数2] length=8. label="ラベル名" format=best.
;
run;
変数が複数ある場合はattrib~;の間に定義しましょう。
attribはlength,label,formatすべて記載できますし、部分的に抜けても問題ありません。
例えばformatは定義不要なら下記のようになります。
[変数1] length=8. label="ラベル名"
これならattribの方が便利だからこちらの方が良い!
なんですけど、私が作業していた時、他の方のプログラムでは
あまりattribが使われていない。。
これは推測ですが理由としては、
・部分的に定義、処理したい時がある。
・length,label,formatはSAS初心者でも見ただけでわかる。
くらいでしょうか。
「部分的に定義、処理したい時がある」に関しては、
例えば処理の中で長さを変えて処理をして、最終的にこの長さで定義するとか。。
経験はないです(笑)
変数の長さの定義に関しては、割と重要です。
変数を新規作成する場合ですが、
数値変数の場合、デフォルトは8です。基本的な数字を扱う場合は、基本8ですので
記載しなくても問題ありません。
文字値変数の場合、少し注意が必要です。デフォルトは1行目の変数の長さになります。
例えば、下記の変数があったとします。
[変数A]
test
testabc
tes
testcomment
tas
この場合、1行目の"test"になりますので、変数Aの長さは4になります。
なので、上記のようにデータを追加したうえで、
lengthやattribにて長さを定義していない場合、
"testabc"や"testcomment"はそのまま出力されずともに"test"になってしまいます。
ここ割と落とし穴でせっかく書いたのに、値が正確に出てこない!
何故だ!となったとき、長さが定義されていないから起こる問題だったりします。
やはり定義はしっかり確認すべきところですね!
適切な出力内容、特に値に文字切れしている場合は、
その変数の長さを確認するところから始めましょう!