仅执行奇数值的宏执行

时间:2017-09-05 16:53:48

标签: sas sas-macro

我正在尝试实现一个只将奇数值带入算法的宏。到目前为止,我的策略如下:

%macro TEST;
    %do i=1 %TO 5;
        %IF %SYSFUNC(MOD(&i,2)=1) %THEN %DO;
        ALGORITHM 
    %END 
%END 

%MEND TEST;

%TEST

但是我收到了一些错误,指出'Macro关键字确实显示为文本'等等。我怎么解决这个问题?

4 个答案:

答案 0 :(得分:3)

由于没有人建议这样做,如何使用%by? E.g。

%macro TEST;
    %do i=1 %TO 5 %by 2;
        %put i = &i;
    %END;
%MEND TEST;

%TEST

答案 1 :(得分:1)

您需要对逻辑值进行评估

%IF %SYSEVALF(%SYSFUNC(MOD(&i,2))=1,BOOLEAN) %THEN %DO;

您有一些语法错误,这是一个有效的版本:

%macro TEST();
    %do i=1 %TO 5;
        %IF %sysevalf(%SYSFUNC(MOD(&i,2))=1,boolean) %THEN %DO;
            %put &i - ALGORITHM ;
        %END ;
    %END ;

%MEND TEST;

%TEST();

产地:

15014  %TEST();
1 - ALGORITHM
3 - ALGORITHM
5 - ALGORITHM

答案 2 :(得分:0)

你的代码缺少很多分号。您还将=1测试置于%sysfunc()宏函数调用的中间位置。

%macro TEST;
%do i=1 %TO 5;
  %IF %SYSFUNC(MOD(&i,2))=1 %THEN %DO;
    %put &i is odd ;
  %END ;
%END;

%MEND TEST;

%TEST;

答案 3 :(得分:0)

由于0(和缺失)的计算结果为false,其他任何内容为true,因此您只需删除“= 1”。

%macro TEST;
    %do i=1 %to 5;
        %if %sysfunc(mod(&i,2)) %then %do;
            %put &i.;
        %end;
    %end;
%mend TEST;

%TEST;