3

我只想遍历一个列表并使用列表中的第 i 个元素运行一个过程,并用结果创建一些名为“i”的表。我已经尝试了我能找到的所有资源的语法,但无法让它工作。这是一些说明我需要的代码/伪代码。提前谢谢了!

array itemlist[*] (100,101,102);

proc sql;
    do i=1 to dim(itemlist);
    create table somelibname.[itemlist(i)] as
        select * from somelibname.sometable
        where item=itemlist(i);
    end;
quit;
4

1 回答 1

7

您需要使用宏为您“编写”SAS 代码。

这应该做你正在寻找的。它需要一个以空格分隔的值列表,并按照您的代码指定的方式遍历它们。如果您对此有疑问,请发表评论。

%macro doit(list);
proc sql noprint;
%let n=%sysfunc(countw(&list));
    %do i=1 %to &n;
        %let val = %scan(&list,&i);
        create table somlib._&val as
            select * from somlib.somtable
            where item=&val;
    %end;
quit;
%mend;

%doit(100 101 102);

请注意,数据集不能以数字开头,因此我将这些以“_”开头

于 2013-09-06T22:26:10.943 回答