%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 ' '
上面的代码部分没有解析为宏变量。我做错了什么?
答案 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;