【问题标题】:using retain to keep track of maximum value使用保留来跟踪最大值
【发布时间】:2015-04-09 09:21:34
【问题描述】:

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

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

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

【问题讨论】:

  • 不是答案,但我认为这可能通过 proc rcmp 而不是宏来更好地完成
  • @Reeza proc fcmp?我会调查的。
  • 糟糕,是的,proc FCMP。

标签: macros sas


【解决方案1】:

试试这个:

%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 是保留字。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-09-13
      • 2012-04-19
      • 1970-01-01
      • 2012-07-19
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 2015-08-22
      • 1970-01-01
      相关资源
      最近更新 更多