cz851218 发表于 2010-5-10 15:13 
我如果要计算连续N个时间段里面的最大值或最小值、还有最值距离现在有多长时间,该如何用SAS程序实现,举个简单点的例子:
假设A列为原始数据,B列为需要最大值的结果,C为最大值距离现在有多长时间(以天计算)
A: 2 5 6 9 8 2 6 5 4 7 9 5 6 7 ....................................
B: 9 9 9 9 8 7 9 9 9 9 ....................................
C: 1 2 3 4 4 0 0 1 2 3 .....................................
其中假设连续时间段N为5天,这个程序可以用LAG函数找出,但是我的数据量很大,同时N的值也很大,这样写起来程序可能很繁琐,同时写出来的程序也不具有普遍性,请问下有高手可以改写下程序不,让它更具有移植性。
希望高手能够帮忙解决下,谢谢!!
Here is one to handle it all in memory. It should be fast enough.
data tmp;
do i = 1 to 100000;
x=ceil(ranuni(12345)*10000) ;
output;
end;
drop i;
run;
%macro max(start,var,loopvar);
%let i=0;
max( %do k=&start %to 1 %by -1;
%let i=%eval(&i+1);
%if &k ne 1 %then &var( &loopvar-&start+&i ), ;
%else &var( &loopvar-&start+&i ) ;
%end ;
)
%mend;
*data _null_;
%let start=10;
data tmp2;
array _x_(1000000) _temporary_;
do until (end);
set tmp end=end nobs=nobs;
i+1;
_x_(i) = x;
end;
do i=&start to nobs;
b=%max(&start,_x_,i);
if i=&start then do ;
c=1;
max_1=b;
end;
else if b ne max_1 then do;
c=0;
max_1=b;
end;
else c+1;
output ;
*put b= c=;
end;
run;
proc print data= tmp(obs=100);
run;
proc print data= tmp2(obs=100);
run;