我有一个宏CVI
,它会为给定的y
返回x
。为了简化它,假设
%macro CVI(Nt);
%local result;
%let result = %sysevalf(2*&Nt**2-&Nt);
&Result;
%mend;
这可以按预期工作
%macro run;
data _null_;
%do i = 1 %to 5;
%let s = %CVI(&i);
%put &i &s;
%end;
run;
%mend;
但我尝试在给定的时间间隔内找到最大值,例如在9
和25
之间。
我修改了%run
但没有运气。
%macro run2;
data _null_;
retain max;
%do i = 9 %to 25;
%if max < %CVI(&i) %then max = %CVI(&i);
%else max = max;
%end;
run;
%mend;
我是否遗漏了宏内的任何内容?
答案 0 :(得分:2)
试试这个:
%macro run2;
data a;
drop x;
max = %CVI(9);
%do i = 9 %to 25;
x = %CVI(&i);
if max < x then max = x;
%end;
run;
%mend;
您还应该将宏%run的名称更改为其他名称。 run是一个保留字。
答案 1 :(得分:0)
这是你想要产生的吗?如果是这样,那么从这里开始创建一个宏。
data _null_;
do i = 9 to 25;
if max < 2*i**2-i then max = 2*i**2-i;
end;
Put MAX=;
run;