在SAS迭代Do循环中正确解析我

时间:2015-12-20 14:55:36

标签: sas sas-macro do-loops

我在理解如何在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 ....)?

0 个答案:

没有答案