【问题标题】:SAS Macro Do LOOPSAS 宏执行循环
【发布时间】:2018-04-04 20:39:49
【问题描述】:

我想有一个偶数年的 sas 宏循环,所以 do 循环会从 2006 年跳到 2008 年再到 2010 年……一直跳到 2018 年,而不是从 2006 年到 2007 年。

当我执行 %by = 2 时,SAS 不起作用并给我一条错误消息。什么是最好的解决方案?

我有以下代码:

%macro import;
    %do I = 2006 %to 2018;
        data BTI&I;
            set edited.Bti_&I;
            year=&I;
        run; 
    %end;
%mend import;
%import;

【问题讨论】:

  • 显示不起作用的代码。 %do i=2006 %to 2018 %by 2; 应该可以正常工作。
  • 如果您只是增加年份,也许有更好的方法来完成这项工作。 INDSNAME 是一种选择。
  • 嗨,汤姆...我使用了非常精确的代码,但收到以下错误消息:错误:%DO I 循环的 %BY 值为零。错误:宏 IMPORT 将停止执行。这是完整的代码: %macro import; %do I = 2006 %to 2018 %by = 2;数据 BTI&I;设置已编辑.Bti_&I;年=&I;跑; %结尾; %修正进口; %导入;

标签: loops sas sas-macro


【解决方案1】:

添加 %by 2 关键字以增加 2 的间隔。我还建议将开始和结束年份作为参数传递给您的函数,并提供 2006 年和 2018 年的默认值。

%macro import(start=2006, end=2018);
    %do I = &start. %to &end. %by 2;
        data BTI&I;
            set edited.Bti_&I;
            year=&I;
        run; 
    %end;
%mend import;
%import;

用法:

  • %import(); 将使用默认值 2006 和 2018
  • %import(start=2009, end=2018); 指定您要使用的日期范围

【讨论】:

  • 您可以通过将by 值也作为宏的参数来进一步改进它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多