如何在SAS中循环遍历宏变量

tri*_*sas 4 sas

我有一个这样的例子:

proc sql;
select dealno into :deal_no 
from deal_table; 
Run Code Online (Sandbox Code Playgroud)

现在我想遍历deal_no现在包含表deal_table中所有dealno 的变量,但我不知道该怎么做.

Lon*_*ish 6

另一个选项是将"分隔"添加到sql代码,这将为值添加分隔符.然后,您可以在数据步骤中使用SCAN函数或在宏中使用%SCAN来循环遍历值并执行您想要的任何任务.以下示例.

proc sql noprint;
select age into :age separated by ','
from sashelp.class;
quit;

%put &age.;

data test;
do i=1 by 1 while(scan("&age.",i) ne '');
    age=scan("&age.",i);
    output;
end;
drop i;
run;
Run Code Online (Sandbox Code Playgroud)


Unk*_*nts 5

如果你这样做

%put &deal_no;
Run Code Online (Sandbox Code Playgroud)

你可以看到它只包含第一个值dealno,而不是所有值.为了避免这种情况,您可以执行以下操作:

proc sql;
    create table counter as select dealno from deal_table;
    select dealno into :deal_no_1 - :deal_no_&sqlobs
    from deal_table;
quit;

%let N = &sqlobs;

%macro loop;
%do i = 1 %to &N;
    %put &&deal_no_&i;
%end;
%mend;

%loop; run;
Run Code Online (Sandbox Code Playgroud)