使用宏创建命名表(使用数据)

时间:2018-02-07 20:40:07

标签: macros sas

我想在宏变量中创建名称存储的表 目前,我的代码只创建了第一个具有正确命名的表。

我的代码

%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

我应该在代码中更改哪些内容才能使其正常工作?

3 个答案:

答案 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;