我在理解如何在do循环中应用/解析Index变量(i)时遇到问题。我有一个非常简单的SQL宏 -
*注意 - 在宏之外的前一个proc sql noprint;
以及quit;
语句之后调用宏。
%macro psql(into,date);
select count(distinct task) into: &into
from source
where c_date between &start and &date;
%mend psql;
通过 - %psql(count10,&date10);
*注意 - 宏变量&date10-&date20
以前都已定义过。这非常有效 - 宏变量&count10
是使用&date10-&date20
的日期值创建的,用于调用%psql
宏及其各自参数的每一行。
与往常一样,我被要求将此扩展到更多日期,因此列出%psql
宏将是重复的。
假设do循环最有效,我尝试以下方法以使用索引(i)来创建我的变量,而不是许多宏调用(每个都持有新的宏参数):
%macro doloop;
%do i=10 %to 20;
proc sql noprint;
select count(distinct task) into: count&i
from source
where c_date between &start and &date&i;
quit;
%end;
%mend doloop;
我尝试使用(I)创建&count
宏变量并引用&date
参数似乎无法解决正在创建/引用的实际宏变量,但是变量( I)本身似乎在迭代期间正确解决 -
SYMBOLGEN: Macro variable I resolves to 10
SYMBOLGEN: Macro variable START resolves to 20429
SYMBOLGEN: Macro variable DATE resolves to 20435
SYMBOLGEN: Macro variable I resolves to 10
SYMBOLGEN: Macro variable I resolves to 11
SYMBOLGEN: Macro variable START resolves to 20429
SYMBOLGEN: Macro variable DATE resolves to 20435
SYMBOLGEN: Macro variable I resolves to 11
问题是否涉及我尝试使用(I)以便"呼叫"一个现有的宏变量,并使用(I)同时创建一个宏变量?在使用已有的日期变量(& date10-& date ....)时,如何引用(I)以创建我的& count变量(& count10-& count ....)?