如何使用宏和sas proc sql创建自定义宏变量?

时间:2017-03-01 17:15:15

标签: sql macros sas

%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

我想要的是获取每个给定主题(或指标)的所有列名列表,并将其存储在宏变量中以备将来使用。我已经从字典表中创建了列名表。当我自己运行上面的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 ' '

上面的代码部分没有解析为宏变量。我做错了什么?

1 个答案:

答案 0 :(得分: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;