仅对奇数执行宏
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;
我正在尝试实现一个仅将奇数值纳入算法的宏。到目前为止,我的策略如下:
%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;