2007年3月12日月曜日

V9での新機能「CALL SYMPUTXルーチン」



今回は、V9で仲間に加わったCALLルーチンを紹介します。


その名もCALL SYMPUTXルーチン です。



V8まででもCALL SYMPUTルーチン というものはありました。


(勿論、V9でも存在します。)



そのCALL SYMPUTルーチン を、もう少し便利にしたものが


CALL SYMPUTXルーチン です。



その違いは結果を見れば明らかなので、早速やってみましょう。




以下のようなプログラムを実行してみます。



 data _NULL_ ;


  x = 1 ;


  call symputx("macX", x) ;


 run ;



実行結果も見てみましょう。


f:id:n-insight:20070311143752g:image


パッと見は何てことはないですが、CALL SYMPUTルーチン との違いは分かりますか?



以下はCALL SYMPUTルーチン での実行結果です。


f:id:n-insight:20070311144223g:image



お気付きでしょうか?


ログの出力に若干の違いが生じます。



「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ステートメントでのログの出力結果に違いがでます。


f:id:n-insight:20070311152321g:image


お分かりですね?



CALL SYMPUTルーチン で数値をそのままマクロ変数に定義すると、


左にブランクが入った状態でマクロ変数に値が格納されます。



よって、


f:id:n-insight:20070311153235g:image


のような結果になるわけです。




以上2点。


CALL SYMPUTルーチン との違いにクローズアップして、CALL SYMPUTXルーチン を紹介しました。


0 件のコメント:

コメントを投稿

ツイート数からみる"バーチャルYouTuber"ブーム

今や YouTuber の話題の半分を占めるほどのクチコミ数に 当社が提供するソーシャルビッグデータ検索ツールの「 beInsight (ビーインサイト)」を使って、話題の「バーチャル YouTuber 」について調べてみました。 「バーチャル YouTuber...