全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学
7242 37
2010-05-10
我如果要计算连续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的值也很大,这样写起来程序可能很繁琐,同时写出来的程序也不具有普遍性,请问下有高手可以改写下程序不,让它更具有移植性。
希望高手能够帮忙解决下,谢谢!!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2010-5-10 16:03:28
data a;
do i=1 to 10000000;
x=int(ranuni(7)*10);
output;
end;
drop i;
run;
%macro b(n,dataname);
data &dataname;
set a;
obs=_n_;
group=int(obs/&n.);
if mod(obs,&n.)=0 then group=int(obs/&n.)-1;
run;
proc sort data=&dataname. out=&dataname.;
by group x;
run;
data &dataname.;
set &dataname.;
by group x;
if last.x=1 and last.group=1;
drop obs;
run;
%mend b;
%b(13,d);


千万级的是数据
NOTE: 有 10000000 个从数据集 WORK.A 读取的观测。
NOTE: 数据集 WORK.D 有 10000000 个观测和 3 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间          18.67 秒
      CPU 时间          6.26 秒



NOTE: 有 10000000 个从数据集 WORK.D 读取的观测。
NOTE: 数据集 WORK.D 有 10000000 个观测和 3 个变量。
NOTE: “PROCEDURE SORT”所用时间(总处理时间):
      实际时间          24.37 秒
      CPU 时间          13.87 秒



NOTE: 有 10000000 个从数据集 WORK.D 读取的观测。
NOTE: 数据集 WORK.D 有 769231 个观测和 2 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间          2.43 秒
      CPU 时间          2.42 秒
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-5-10 16:04:32
还有最值距离现在有多长时间
不晓得是什么意思
楼主解释哈
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-5-10 16:25:59
楼上的解答可能不是作者的本意,我来抛砖引玉吧:

data a;
input x @@;
cards;
2 5 6 9 8 2 6 5 4 7 9 5 6 7
;
run;

data aa;
set a;
rename x=x1;
run;

data b;

DO row=5 TO 14;
set a point=row;
   do col=row-4 to row;
      set aa point=col;
          retain xxx xx;
          xx=max(x1,x);
          xxx=max(xxx,xx);
          put xx= @;
          put xxx= @;
          put x1= @;
          put x=;
   end;
output;
xxx=0;
put xxx=;
END;
stop;
keep xxx;
run;

再把5和14做成宏变量即可.

第二个问题请楼主自己想一想,相信你会做的.
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-5-10 16:58:26
复制代码
时间窗内多个达到最值取最后条计算差值,如需第一条则使用注释部分的就是max和min
这个时间窗可以调,也很快
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-5-10 16:59:11
3# crackman


谢谢你的回答,
不过我的意思不是把数据划分为每一段都为5个数据,而是由点类似移动平均的概念.....,如:
2 5 6 9 8 2 6 5 4 7 9 5 6 ...............以5为周期需划分为(2 5 6 9 8)、(5 6 9 8 2)、(6 9 8 2 6)、(9 8 2 6 5)、(8 2 6 5 4 )等等,实际上我想生成一个以20 ,100 甚至更大的N为周期一系列数组,取这些数组间的最值。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群