使用 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;
但我试图找到给定区间内的最大值,比如在 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;
我是否遗漏了宏中的任何内容?
试试这个:
%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;
我有一个宏 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;
但我试图找到给定区间内的最大值,比如在 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;
我是否遗漏了宏中的任何内容?
试试这个:
%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;