使用retain来跟踪最大值

时间:2015-04-09 09:21:35

标签: macros sas

我有一个宏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;

但我尝试在给定的时间间隔内找到最大值,例如在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;

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

2 个答案:

答案 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;