首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SAS迭代Do循环中正确解析I

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

Stack Overflow用户
提问于 2015-12-20 14:55:35
回答 1查看 570关注 0票数 1

我很难理解索引变量(i)是如何在do循环中应用/解析的。我有一个非常简单的SQL宏-

*注意-宏在前面的proc sql noprint;以及宏之外的quit;语句之后调用。

代码语言:javascript
复制
%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)来创建变量,而不是许多宏调用(每个调用都包含新的宏参数):

代码语言:javascript
复制
%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)本身似乎在迭代期间正确解析-

代码语言:javascript
复制
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 .)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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的示例。

代码语言:javascript
复制
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 VALUE
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34382256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档