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@Reezaproc fcmp
?我会调查的。哦,是的,程序FCMP。