【问题标题】:How to use loops for macro function calls in sas如何在 sas 中使用循环进行宏函数调用
【发布时间】:2016-09-22 10:02:49
【问题描述】:

我在 sas 中使用以下语句进行函数调用

%loopit(26062015,bbbbbbINFY,FUTSTK,30Jul2015);
%loopit(26062015,bbbbbbSBIN,FUTSTK,30Jul2015);
%loopit(26062015,bbbbbbbTCS,FUTSTK,30Jul2015);

我之前已经在代码中定义了 loopit 宏。可以看出,在函数调用中,只有一个参数发生变化,其余参数不变。我想如果有任何循环结构(例如数组)我可以使用它来使它更有用。

【问题讨论】:

    标签: loops macros sas


    【解决方案1】:

    您可以定义要循环的参数列表,然后在每个参数上调用%loopit

    %let param_list = bbbbbbINFY bbbbbbSBIN bbbbbbbTCS;
    
    %macro loop_them;
    
        %do i = 1 %to %sysfunc(countw(&param_list.));
        %let this_param = %scan(&param_list., &i.);
    
            %loopit(26062015,&this_param.,FUTSTK,30Jul2015);
    
        %end;
    
    %mend loop_them;
    
    %loop_them;
    

    【讨论】:

    • 最好将param_list 设为%loop_them 的参数。
    • 并将 &i 和 &this_param %local 设置为宏,以避免冲突。
    【解决方案2】:

    您可以使用call execute 函数。例如,如果您有一个要传递的顺序计数基本参数,那么您可以使用以下代码:

    Data _NULL_;
    count = 0;
    for i=0 to 10;
    call execute ( ‘%loopit(count)’ );
    end;
    run;
    

    我不完全确定上面使用的语法。谷歌更清楚。我之前也以同样的方式使用过call execute

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多