仅对奇数执行宏

Macro execution for only odd values

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

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

%MEND TEST;

%TEST

但是我收到了几个错误,指出 'Macro keyword do appears as text' 等。我该如何解决这个问题?

您需要对逻辑值进行评估

%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

您的代码缺少很多分号。您还将 =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;

既然没有其他人提出这个建议,那么使用 %by 怎么样?例如

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

%TEST

由于 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;