我正在尝试实现一个只将奇数值带入算法的宏。到目前为止,我的策略如下:
%macro TEST;
%do i=1 %TO 5;
%IF %SYSFUNC(MOD(&i,2)=1) %THEN %DO;
ALGORITHM
%END
%END
%MEND TEST;
%TEST
但是我收到了一些错误,指出'Macro关键字确实显示为文本'等等。我怎么解决这个问题?
答案 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;