2017-03-01 11 views
0
%macro get_names_into_macvar(name1=,into1=); 
    proc sql; 
    select name into :&into1 separated by ' ' 
     from column_names 
      where UPCASE(name) contains upcase("&name1"); 
      ; 
    quit; 
%mend; 
%get_names_into_macvar(name1=topic1, into1=topic1macvar); 
%get_names_into_macvar(name1=topic2, into1=topic2macvar); 

私は非常に大きなデータセットを持っており、単純なフォーマットに従った非常に多くのカラムを持っています。各列は、そのトピックの異なるメトリックを表します。列名は topic1_metric1、topic1_metric2 ....、topic5_metric15、... topic20_metric1マクロとsas proc sqlを使用してカスタムマクロ変数を作成するにはどうすればよいですか?

のようになります。それぞれのトピック(またはメトリック)のすべての列名のリストを取得し、将来の使用のためのマクロ変数。私はすでに辞書テーブルから列名のテーブルを作成しました。上記のsqlコードを単独で実行すると、動作しますが、トピック名のコピーと貼り付けと変更は、これを実行する最も効率的な方法にはなりません。

proc sql; 
    select name into :topic1macvar separated by ' ' 
     from column_names 
      where UPCASE(name) contains upcase("topic1"); 
      ; 
    quit; 

私の問題は、カスタムマクロ変数を作成してトピックごとに格納することにあります。

select name into :&into1 separated by ' ' 

上記のコードのセクションは、マクロ変数に解決されていません。私は間違って何をしていますか?

+0

マクロの実行が停止した後で、これらのマクロ変数を使用しようとしていますか?現在のコードでは、GLOBALマクロスコープでマクロ変数を作成するものはありません。したがって、それらはローカルになり、マクロが終了すると消えます。テストするには、%PUTをマクロに追加して、値が実際に格納されているかどうかを確認します。 – Tom

答えて

2

ほとんどの場合、マクロ終了時にローカルマクロ変数を消してしまうことがあります。

%macro get_names_into_macvar(name1=,into1=); 
    %if not %symexist(&into1) %then %global &into1 ; 
    proc sql noprint; 
    select name into :&into1 separated by ' ' 
     from column_names 
     where UPCASE(name) contains %upcase("&name1") 
    ; 
    quit; 
%mend; 
+0

問題が解決しました! **ありがとうございます** – Chris

関連する問題