Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops SAS宏Do循环_Loops_Sas_Sas Macro - Fatal编程技术网

Loops SAS宏Do循环

Loops SAS宏Do循环,loops,sas,sas-macro,Loops,Sas,Sas Macro,我希望有一个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;

我希望有一个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;

%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
  • %导入(开始=2009,结束=2018)指定要使用的日期范围

显示不起作用的代码<代码>%do i=2006%至2018%由2应该可以很好地工作。如果你只是增加一年,也许有更好的方法来完成这项工作。INDSNAME是一个选项。嗨,Tom…我使用了非常精确的代码,我得到了以下错误消息:错误:%DoI循环的%BY值为零。错误:宏导入将停止执行。以下是完整代码:%macro import;%I=2006%至2018%的do=2;数据BTI&I;设置已编辑。Bti_&I;年份=&I;运行;%结束;%修正进口;%进口;您还可以通过将
by
值作为宏的参数来进一步改进它。