首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sas宏调用宏

sas宏调用宏
EN

Stack Overflow用户
提问于 2012-11-28 06:36:57
回答 2查看 372关注 0票数 0

嗨,我有一个程序,使用一个宏来调用另一个宏。

我有两个月(jun12和jul12),每个月有两个部分(1和2),我想做一个循环,我构造了一个名为“循环”的宏,在它里面,我构造了一个数组,并使用do comment Do调用宏"try“。

看起来好像不管用。有人能帮我一下吗?谢谢!

代码语言:javascript
复制
 LIBNAME EC100006 "G:\sample";
%MACRO try(month=,part=);
      ...FROM EC100006.monthitsum&month.lag&part AS t1
%MEND try;

%Macro test;
    ARRAY Mon(2) jun12 jul12;
    %Do i=1 %to 2;
        %Do j=1 %to 2
            %try(month=Mon(i),part=j)
        %End
    %End
%Mend test;

%test
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-28 22:21:13

你不能有一个宏变量数组。

重复调用带有参数列表的宏的最简单方法是使用这些参数创建一个数据集,然后从数据集中调用它,方法是使用call EXECUTE或使用PROC SQL创建宏调用的宏列表。

代码语言:javascript
复制
data call;
input month $ part;
datalines;
jun12 1 
jul12 2
;;;;
run;

proc sql;
select cats('%try(month=',month,',part=',part,')') into :mcalllist 
  separated by ' ' 
  from call;
quit;

&mcalllist;

只有当您的调用少于20,000个字符左右时才有效-如果超过20,000个字符,则需要尝试不同的选项(%include file或call execute)。

票数 0
EN

Stack Overflow用户

发布于 2012-11-30 02:28:47

所以现在是这样的

代码语言:javascript
复制
LIBNAME EC100006 "G:\sample";
%MACRO try(month=,part=);
  ...FROM EC100006.monthitsum&month.lag&part AS t1
%MEND try;

Data Array
ARRAY Mon{2} jun12 jul12;
RUN;
%Macro test;
    %Do i=1 %to 2;
    %Do j=1 %to 2
        %try(month=Mon(i),part=j)
    %End
%End
%Mend test;

%test
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13594445

复制
相关文章

相似问题

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