今回は、V9で仲間に加わったCALLルーチンを紹介します。
その名もCALL SYMPUTXルーチン です。
V8まででもCALL SYMPUTルーチン というものはありました。
(勿論、V9でも存在します。)
そのCALL SYMPUTルーチン を、もう少し便利にしたものが
CALL SYMPUTXルーチン です。
その違いは結果を見れば明らかなので、早速やってみましょう。
以下のようなプログラムを実行してみます。
data _NULL_ ;
x = 1 ;
call symputx("macX", x) ;
run ;
実行結果も見てみましょう。
パッと見は何てことはないですが、CALL SYMPUTルーチン との違いは分かりますか?
以下はCALL SYMPUTルーチン での実行結果です。
お気付きでしょうか?
ログの出力に若干の違いが生じます。
「NOTE: 以下の箇所で数値を文字値に変換しました。」というメッセージが
CALL SYMPUTXルーチン では出力されません。
SASは、数値から文字値(または文字値から数値)に変換が行われた場合、
ログにその旨を必ず出力します。
CALL SYMPUTルーチン での結果も間違いではありませんが、
多少の気持ち悪さを感じる場合は、
call symput("macX", put(x,best.)) ; のように、
一度、変数Xを文字値に変換してから、マクロ変数MACXを定義するというやり方をしていました。
CALL SYMPUTXルーチン を使用すると、そのような処理をする必要がなくなります。
もう1つ違いを挙げておきます。
上記の結果から考えると、ある意味必然的なことですが・・・。
data _NULL_ ;
x = 1 ;
y = 2 ;
call symputx("macX", x) ;
call symput("macY", y) ;
run ;
%put *****macX=&macX***** ;
%put *****macY=&macY***** ;
のようなプログラムを実行すると、
%PUTステートメントでのログの出力結果に違いがでます。
お分かりですね?
CALL SYMPUTルーチン で数値をそのままマクロ変数に定義すると、
左にブランクが入った状態でマクロ変数に値が格納されます。
よって、
のような結果になるわけです。
以上2点。
CALL SYMPUTルーチン との違いにクローズアップして、CALL SYMPUTXルーチン を紹介しました。
0 件のコメント:
コメントを投稿