我想在宏变量中创建名称存储的表 目前,我的代码只创建了第一个具有正确命名的表。
我的代码
%let list = var1 var2 var3;
%put list;
%macro rob;
data dat_&list;
run;
%mend;
%rob;
所需的输出应该是有三个表格,这些名称已分组:dat_var1, dat_var2, dat_var3.
但是现在它会创建dat_var1, var2, var3
我应该在代码中更改哪些内容才能使其正常工作?
答案 0 :(得分:0)
宏是一种动态编写SAS代码的方法。您可以使用options mprint;
查看生成的内容。在这个简单的例子中,它是:
data dat_var1 var2 var3;
run;
您想要阅读的内容是:
data dat_var1 dat_var2 dat_var3;
run;
因此,您需要遍历list
宏并创建这些值。
%macro rob();
%local i n;
%let n=%sysfunc(countw(&list));
data
%do i=1 %to &n;
dat_%scan(&list,&i)
%end;
;
run;
%mend;
%rob;
试一试。
答案 1 :(得分:0)
使用click_button()
是一种将前缀/后缀字符串添加到分隔列表的简单方法。优点是它不需要条件代码,因此不需要包装到宏中。但请确保您的列表在单词/代币之间没有多个分隔符。
TRANWRD()
答案 2 :(得分:0)
使用常规快递。 (\ w +)表示单词字符,将替换为dat _(\ w +)(对于\ w +,此处为$ 1)。
%let list = var1 var2 var3;
%put list;
%macro rob;
data %sysfunc(prxchange(s/(\w+)/dat_$1/,-1,&list));
run;
%mend;
%rob;