我很难理解索引变量(i)是如何在do循环中应用/解析的。我有一个非常简单的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;这个宏被称为via - %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参数,但在创建/引用实际的宏var时,似乎没有解析,但是varaiable (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)创建宏变量?如何引用(I)来创建我的&count变量(&count 10-&count.)使用已经存在的日期变量(&date10-& date .)?
发布于 2015-12-20 15:59:24
我认为您是在讨论count&i、&date&i和&&date&i之间的区别。
count&i将解析为COUNT10。并且您的SQL代码的编写方式--这将用作接收计数的宏变量的名称。
&date&i将取决于DATE宏变量的值。如果宏变量DATE具有值20435,那么在日期比较中,您的SQL代码将使用值2043510 (在7554年)。
&&date&i将首先简化为&date10,然后进一步解析为宏变量DATE10的值。我认为这就是您希望在SQL代码中使用的内容。
下面是一个打开SYMBOLGEN的示例。
105 %let date10=SOME DATE VALUE;
106 %let date=ANOTHER DATE VALUE;
107 %let i=10;
108 options symbolgen;
109 %put count&i;
SYMBOLGEN: Macro variable I resolves to 10
count10
110 %put &date&i;
SYMBOLGEN: Macro variable DATE resolves to ANOTHER DATE VALUE
SYMBOLGEN: Macro variable I resolves to 10
ANOTHER DATE VALUE10
111 %put &&date&i;
SYMBOLGEN: && resolves to &.
SYMBOLGEN: Macro variable I resolves to 10
SYMBOLGEN: Macro variable DATE10 resolves to SOME DATE VALUE
SOME DATE VALUEhttps://stackoverflow.com/questions/34382256
复制相似问题