2017-10-12 26 views
1

マクロ変数を作成しようとしています。を解決した後に、既に存在する変数にテキストを連結してマクロ変数名を作成する必要があります。具体的には、PROC SQLブロックで、INTO:を使用してこの処理を行いたいとします。ここで私がしたいことを説明するスニペットがあります。 SAS - テキストを現在のマクロ変数に連結して動的にマクロ変数を作成する

%macro MyMacro(process); 
    PROC SQL; 
     SELECT 
      COUNT(*) INTO: &process._new_text 
     FROM 
      DataSetHere 
    ;QUIT; 
%mend MyMacro; 

私はこのマクロを呼び出すと、私は、私が今宣言しているにしたいプロセスに単語「猫」を渡した場合は、/名前cat_new_textで変数を初期化し、そしてそれはCOUNTを返す必要があります(*)& cat_new_textが参照されている場合は、そのクエリで選択されています。

私はちょっと読んだところで、複数のアンパサンドを使用して、&の処理を最初に解決しようとしました - 何も本当に私の正確な問題を解決しませんでした。誰かがこれを達成する明確な方法を知っていますか?

ありがとうございます!

+1

私はprocのSQL​​文に 'noprint'を追加することを示唆している、そうでない場合、これはリストに選択した値を出力しますマクロが実行されるたびに領域。 – user667489

答えて

2

あなたのコードはうまくできているように思えます。あなたが実際に、その後に「アクセス」マクロ外の新しいマクロ変数、例えば、

%MyMacro(cat); 
%put &cat._new_text.; 

をしようとした場合、変数はマクロでローカルに作成され、その範囲外では存在しないので、 は、しかし、それは動作しません。マクロ。これを修正するには

、単にあなたのマクロ定義で%globalステートメントを追加する必要があります。

%macro MyMacro(process); 
    %global &process._new_text; 
    PROC SQL; 
    SELECT COUNT(*) 
    INTO: &process._new_text 
    FROM DataSetHere 
    ; 
    QUIT; 
%mend MyMacro; 
+0

%GLOBALがトリックをしました。どうもありがとう! –

関連する問題