【发布时间】:2015-12-20 14:55:35
【问题描述】:
我在理解如何在 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 之前都已定义。这完美地工作 - 宏 var &count10 被创建,使用来自 &date10-&date20 的日期值来调用带有各自参数的 %psql 宏的每一行。
与往常一样,我被要求将其扩展到更多日期,因此列出 %psql 宏将是重复的。
假设 do 循环是最有效的,我尝试了以下操作以使用 index(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....)?
【问题讨论】:
-
在这里思考......使用静态日期 + (I) 调用日期变量而不是使用预定义的日期宏变量是否有意义?