Sas 仅对奇数值执行宏
我正在尝试实现一个宏,它只在算法中引入奇数值。我的策略如下:Sas 仅对奇数值执行宏,sas,sas-macro,Sas,Sas Macro,我正在尝试实现一个宏,它只在算法中引入奇数值。我的策略如下: %macro TEST; %do i=1 %TO 5; %IF %SYSFUNC(MOD(&i,2)=1) %THEN %DO; ALGORITHM %END %END %MEND TEST; %TEST 但我收到几个错误,其中包括“宏关键字do显示为文本”。我该如何解决这个问题 您需要对逻辑值进行评估 %IF %SYSEVALF(%SYSFUNC(MOD(&
%macro TEST;
%do i=1 %TO 5;
%IF %SYSFUNC(MOD(&i,2)=1) %THEN %DO;
ALGORITHM
%END
%END
%MEND TEST;
%TEST
但我收到几个错误,其中包括“宏关键字do显示为文本”。我该如何解决这个问题 您需要对逻辑值进行评估
%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;