使用 retain 来跟踪最大值

using retain to keep track of maximum value

我有一个宏 CVI,对于给定的 x,return 一个 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;

但我试图找到给定区间内的最大值,比如在 925 之间。

我修改了 %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;

我是否遗漏了宏中的任何内容?

试试这个:

%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;

您还应该将宏 %运行 的名称更改为其他名称。 运行 是保留字。

这是您要生成的内容吗?如果是这样,那么从这里开始创建宏。

data _null_;
  do i = 9 to 25;
    if max < 2*i**2-i then max = 2*i**2-i;
  end;
    Put MAX=;
run;