我有一个这样的例子:
proc sql;
select dealno into :deal_no
from deal_table;
现在我想遍历deal_no
现在包含表 deal_table 中所有 dealno 的变量,但我不知道该怎么做。
我有一个这样的例子:
proc sql;
select dealno into :deal_no
from deal_table;
现在我想遍历deal_no
现在包含表 deal_table 中所有 dealno 的变量,但我不知道该怎么做。
另一种选择是在 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;
如果你这样做
%put &deal_no;
你可以看到它只包含 的第一个值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;
这是另一个解决方案。
proc sql noprint;
select age into :ageVals separated by ' '
from ageData;
quit;
%put &ageVals;
%macro loopAgeVals; %let i = 1; %let ageVal = %scan(&ageVals, &i);
%do %while("&ageVal" ~= "");
%put &ageVal;
%let i = %eval(&i + 1);
%let ageVal = %scan(&ageVals, &i);
%end;
%mend;
%loopAgeVals;