sql - 为许多参数执行 SAS 宏

标签 sql macros sas

我使用以下代码向表中插入行:

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/

相关文章:

sql - percentile_disc 与 percentile_cont

sql - PostgreSQL - 确定总数的百分比

c - C 考试评分计划

objective-c - 函数的隐式声明 - C99

c - 这个宏有什么问题?

sql - psql: FATAL: 角色连接太多

mysql - 如何在SQL中搜索和排序结果

sas - 删除SAS中两个值之间的行

loops - SAS 组合数据集、二进制搜索、索引

sas - 不等于运算符在 SAS proc sql 中未按预期工作