SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1126|回复: 5
打印 上一主题 下一主题

如何在数组中求最大值-新手求救

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2008-10-19 13:29:02 | 只看该作者

如何在数组中求最大值-新手求救

在编程中,需要对数组求最大值,但引用MAX时出错,原因可能是MAX函数内不能有变量,我试过MEAN等函数,好象都不能进行这种操作。请问各位大虾,有没有好的解决方案,谢谢!具体程序如下:

data aa;
input time time8. price amount total;
array lagb(10) lagb1 - lagb10;
array lagc(10) lagc1 - lagc10;
lagb1=lag(price);
do i=2 to 10 by 1;
lagb(i)=lag(lagb(i-1));
end;
do i=2 to 10 by 1;
lagc(i)=max(of lagb1-lagb(i)); %MAX 函数调用没有足够的参数%
end;
cards;
09:25:00 9.550 200 1910.000
09:30:00 9.540 500 4770.000
09:30:00 9.540 100 954.000
09:30:00 9.530 1000 9530.000
09:30:00 9.520 9000 85680.000
09:30:00 9.520 1000 9520.000
09:30:00 9.520 600 5712.000
09:30:00 9.530 2000 19060.000
09:30:00 9.540 1000 9540.000
09:30:01 9.540 900 8586.000
09:30:01 9.540 300 2862.000
09:30:01 9.540 500 4770.000
09:30:01 9.540 1500 14310.000
09:30:01 9.520 5000 47600.000
;
proc print;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2008-10-20 11:33:36 | 只看该作者

Re: 如何在数组中求最大值-新手求救

根据我对楼主程序的解读,求10日移动最大值,如果不足10日,就求前n日最大值,如果是这样的话,下面这个程序就可以了!~
data aa;
input time time8. price amount total;
array lagb(10) lagb1 - lagb10;
lagb1=lag(price);
do i=2 to 10 by 1;
lagb(i)=lag(lagb(i-1));
end;
max_c=max(of lagb1-lagb10);
cards;
09:25:00 9.550 200 1910.000
09:30:00 9.540 500 4770.000
09:30:00 9.540 100 954.000
09:30:00 9.530 1000 9530.000
09:30:00 9.520 9000 85680.000
09:30:00 9.520 1000 9520.000
09:30:00 9.520 600 5712.000
09:30:00 9.530 2000 19060.000
09:30:00 9.540 1000 9540.000
09:30:01 9.540 900 8586.000
09:30:01 9.540 300 2862.000
09:30:01 9.540 500 4770.000
09:30:01 9.540 1500 14310.000
09:30:01 9.520 5000 47600.000
;
proc print;
run;
如果不是求10日移动最大值,请楼主把意图说出来,这类问题应该不难!~
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2008-10-20 13:18:25 | 只看该作者

TO:缘来是你

抱歉,是我没把问题说清楚,这个程序不是用来求10日移动最大值的,而是求N日内最大值。举例说明,要求股价不低于起始日(假如为1日)后N日最高价的95%,否则即抛出,如1日至3日,最高价为10元,则卖出触发价为9.5元;如3日至15日,最高价为20元,则卖出触发价为19元,所以在编程时,要求出N日内最大值,其中N日是一个变量,目前考虑用循环来解决,问题是要找出求N日内最大值的函数或者编程思路,最后再谢谢缘来是你,请您再继续解答问题。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2008-10-20 14:37:17 | 只看该作者

Re: 如何在数组中求最大值-新手求救

要是这样就更简单了。
data aa;
input time time8. price amount total;
retain max_price;
if max_price<price then max_price=price;
cards;
09:25:00 9.550 200 1910.000
09:30:00 9.540 500 4770.000
09:30:00 9.540 100 954.000
09:30:00 9.530 1000 9530.000
09:30:00 9.520 9000 85680.000
09:30:00 9.520 1000 9520.000
09:30:00 9.580 600 5712.000
09:30:00 9.530 2000 19060.000
09:30:00 9.540 1000 9540.000
09:30:01 9.540 900 8586.000
09:30:01 9.540 300 2862.000
09:30:01 9.540 500 4770.000
09:30:01 9.540 1500 14310.000
09:30:01 9.520 5000 47600.000
;
proc print;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2008-10-23 16:58:27 | 只看该作者

to:缘来是你,问题这样表述可能比较清楚,请继续答复

对不起,是我没把问题想清楚,问题如果这么表述,就比较简单了。
求每分钟之中,股价的最大值,如9:30分,有好几笔成交,最大值为9.580。
还请继续答复。

data aa;
input time time8. price amount total;

cards;
09:25:00 9.550 200 1910.000
09:30:00 9.540 500 4770.000
09:30:00 9.540 100 954.000
09:30:00 9.530 1000 9530.000
09:30:00 9.520 9000 85680.000
09:30:00 9.520 1000 9520.000
09:30:00 9.580 600 5712.000
09:30:00 9.530 2000 19060.000
09:30:00 9.540 1000 9540.000
09:30:01 9.540 900 8586.000
09:30:01 9.540 300 2862.000
09:30:01 9.540 500 4770.000
09:30:01 9.540 1500 14310.000
09:30:01 9.520 5000 47600.000
;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2008-10-23 20:40:05 | 只看该作者

Re: 如何在数组中求最大值-新手求救

没有多想,就使用sql语句吧,肯定能满足你的要求。result数据集就是你要的结果。至于用data步方法,我在想想,请其他朋友也帮忙想想啊:)
proc sql;
create table result as
select *,max(price) as max_price from aa group by time;
quit;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-5 01:34 , Processed in 0.069647 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表