我使用以下代码向表中插入行:
proc sql;
create table business_keys as
select name, memname
from sashelp.vcolumn
where 1=0;
quit;
%macro insert(list);
proc sql;
%do i=1 %to &max;
%let val = %scan(&list,&i);
insert into business_keys
select distinct name, memname
from sashelp.vcolumn
where upcase(memname) = "&list"
and upcase(name) like '%_ZRODLO_ID%'
and length(name) = 12;
%end;
quit;
%mend;
%insert(&name1);
现在它向我插入同一行许多 &max
次。
我必须为所有宏变量 (&name#) 执行它,而不仅仅是为 &name1
。 如何同时传递所有变量?原则上,我想遍历所有这些表名:
%insert(&name1-&name&max)
%name1 = PEOPLE, %name2 = CREDITS, ... %name%max = ANY_TABLE_NAME
其中 &name# 是表名,&max 是表数。
最佳答案
ok,现在我明白你想做什么了,其实很简单:
%macro insert;
proc sql;
%do i=1 %to &max;
insert into business_keys
select distinct name, memname
from sashelp.vcolumn
where upcase(memname) = upcase("&&name&i") and upcase(name) like '%_ZRODLO_ID%' and length(name) = 12;
%end;
quit;
%mend;
%insert;
&&name&i 解析为 &name1\&name2...\&namex,根据 i 解析为 PEOPLE\CREDITS...\ANY_TABLE_NAME。
关于sql - 为许多参数执行 SAS 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38052612/