%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 ' '
上面的代碼段沒有解析成宏變量。我究竟做錯了什麼?
是你的問題,你試圖在宏停止運行後使用這些宏變量?您當前的代碼沒有任何東西可以在GLOBAL宏作用域中生成宏變量。所以他們將是本地的,並在宏觀結束時消失。要測試在宏中添加%PUT以查看值是否實際存儲。 – Tom