ユーザーが値を入れなくても、勝手に決まった名前で作成されているマクロ変数です。
%put _automatic_;
って書いて実行すればログに溢れてきます。
なにせ自動で作成されているので、利用すると労力削減になるケースが多くて万歳です。
例えば、データセットを作成するプログラムがあったとして、
そのデータセットを誰が作ったかをデータセットに変数の値として持たせたいとします。
data A;
X=2;
run;
自動マクロ変数&SYSUSERIDを使えば、SASセッションを開始した
ユーザー(PCに設定されているユーザー名)が簡単に取得できます。
data B;
set A;
X=X*2;
NAME="&SYSUSERID";
run;
これで、いちいちログ見なくても
SASYAMAがデータセットBを作成したってことが一目瞭然です。
(データセットに作成者全レコードに持たせるなんてマジ無駄ですが)
で、これを同じ様にSQLで書くと
proc sql;
create table C as
select X*2 as X
,user as NAME
from A;
quit;
とかけます。
この「user」っていうのが、別にマクロ変数でもないのに、固有の変数名で
&SYSUSERIDと同じ値を返します。
でも当然
proc sql;
create table D as
select X*2 as X
,"&SYSUSERID"as NAME
from A;
quit;
も通るので、あんまりお勧めできる書き方ではないかも
(ぱっと見、知っている人じゃないと意味が取れないし)
意地でもマクロ変数をコードから排除してやるって方はどうぞ。
ちなみに僕は必然性がない限り極力マクロは使わない派です。
マクロを使うべきところに使っているのは当然いいですし、マクロなしで
SASプログラミングは成立しないと思っています。
しかし、他人様のSASコードを見ていると、SQLで簡単に処理できたり
class や by ステートメントやtransposeプロシジャをうまく使えば
簡単なコードと最小ステップでまわせるような処理を
わざわざ細切れのマクロにして、グルグル回していたりして、
それはSASの良さを殺してんじゃないかしら、、と思ったりして。
かなり偉そうになりましたのでこの辺まで。
多分、複雑なマクロ組めないのでひがんでいるんですね
0 件のコメント:
コメントを投稿