2017-09-21 56 views
-1
%let val = ' run'; 

%macro rrun; 
    %put successfully run; 
%mend; 

%macro x; 
    %r%cmpres(&val.); 
/* %rrun;*/ 
%mend;%x 

私は、「SASでマクロ変数名にマクロ変数を渡そうとしメートル(&ヴァル。)マクロ名に通過値%のcmpresを使用して、%rrunを実行するために、 『これがない理由rrunは』私は理解していません圧縮& valが「実行」SASでマクロ変数をマクロ変数名に渡す方法は?

どのように私はこの問題を解決し、まだ&のvalを渡すことができますか?

おかげで、あなたは、マクロ変数に引用符を持っていないのはなぜ

答えて

1

を?

ある作品。
166 %let val = ' run'; 
167 %put |%cmpres(&val)|; 
|' run'| 

マクロ名を動的に生成したい場合は、最初に名前をマクロ変数に生成し、そのマクロ変数を参照すれば、より簡単に呼び出すことができます。それ以外の場合は、トークナイザを混乱させる危険があります。

%macro x; 
    %local mname; 
    %let mname=r%cmpres(&val); 
    %&mname; 
%mend; 
%x 
+0

こんにちはTom、答えてくれてありがとう。私は実際のプログラムがデータベースからの文字列のリストから変数の配列を引っ張っていたので、この例では「実行」しました。 – JPC

+0

マクロ変数の値は引用符を必要とせず、そこにある場合は値の一部です。引用符が必要なSASコードとは異なり、コンパイラは文字列リテラルに変数名またはキーワードを伝えることができます。データ・ステップで 'CALL SYMPUTX()'を使用するか、SQLコードで 'TRIMMED'または' SEPARATED BY'キーワードを使用して、空白を前後することなくマクロ変数を生成してください。 – Tom

関連する問題