2017-06-15 19 views
1

シンプルなマクロを作成し、シンプルなSASデータステップで適用して、出力を表示する際の問題を示しました。SASマクロ変数値を出力する方法

マクロ:

%macro test_func(var=); 
%put &var; 
%mend; 

Dataステップ:

data test_data_step; 
value = 0; 
%test_func(var = value); 
run; 

私の問題は、私が見出力は単なる文字列valueではなく、名前が等しい変数に保持されている値であるということです文字列。

私はSASがこれをやっている理由をあいまいに理解していると思いますが、希望の値を与える方法(この場合は0)はわかりません。だから私はどのようにその機能を達成することができますか?

ありがとうございます!

答えて

2

問題は、%putputの違いにあります。

マクロ変数&varの内容を確認しますか?次に、%put(&var)を使用します。

ただし、&varに名前が格納されているSASデータステップ変数の内容を表示する場合は、put(&var)を使用します。

%macro test_func(var=); 
put &var.; 
%mend; 

そして今、これはあなたが期待するように動作します: - %test_func;の除去を - それは

data test_data_step; 
    value = 0; 
    %test_func(var = value) 
run; 

は、(1つの、他のマイナーチェンジに注意してください、私はこれを書き換えるでしょう。このよう

あなたはそれをそこに置く習慣に入ると、通常は大きな問題ではありませんが、問題を引き起こす可能性があります)

+0

+1。ありがとう@ジョー!いつものように、あなたの答えは簡潔ではっきりしており、有益です - 毎回何かを学びます! 1つの問題:変数値を出力することに私の主な関心は私のマクロのトラブルシューティングでした。このアプローチでは、マクロ内に複数の非マクロステートメントがあり、トラブルシューティング中に他のエラーが発生します。だから私は進める方法が不思議に残っている。私はここで別の質問をすることができますが、私は少なくとも自分自身を理解しようとします。あなたは何をお勧めします?再度、感謝します! – Rookatu

+0

本当にあなたがやっていることに依存します。しかし、最終的に、マクロ言語( '%put 'など)は実際の値にアクセスできなくなります。おそらく問題を起こさない方法でデバッグ文をそこに置く方法を理解する必要があります。私がしばしばやることの1つは、メインコード本体にコードをデバッグすることです(実際にマクロに入っているかどうかは関係ありません)。そして、 '&debug = Y'の変数をチェックする'%if'ブロックを '&debug = Y'デバッグコード。 – Joe

関連する問題