Macros 使用retain跟踪最大值

Macros 使用retain跟踪最大值,macros,sas,Macros,Sas,我有一个宏CVI,它返回给定x的y。简单地说,假设 %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; %

我有一个宏
CVI
,它返回给定
x
y
。简单地说,假设

%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;
%宏运行2;
数据为空;
保留最大值;
%i=9%至25%;
%如果最大值<%CVI(&i)%,则最大值=%CVI(&i);
%else max=max;
%结束;
跑
%修补;
宏中有什么遗漏吗?

试试这个:

%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;
%宏运行2;
数据a;
滴x;
最大值=%CVI(9);
%i=9%至25%;
x=%CVI(&i);
如果max

此外,还应将宏%run的名称更改为其他名称。run是一个保留字。

这是您试图生成的吗?如果是这样,那么从这里开始创建宏

data _null_;
  do i = 9 to 25;
    if max < 2*i**2-i then max = 2*i**2-i;
  end;
    Put MAX=;
run;
数据\u空\u;
i=9至25;
如果max<2*i**2-i,则max=2*i**2-i;
结束;
放最大值=;
跑

不是答案,但我认为通过proc rcmp而不是通过macro@Reeza
proc fcmp
?我会调查的。哦,是的,程序FCMP。