SAS中文论坛

标题: 如何在数组中求最大值-新手求救 [打印本页]

作者: shiyiming    时间: 2008-10-19 13:29
标题: 如何在数组中求最大值-新手求救
在编程中,需要对数组求最大值,但引用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;
作者: shiyiming    时间: 2008-10-20 11:33
标题: 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日移动最大值,请楼主把意图说出来,这类问题应该不难!~
作者: shiyiming    时间: 2008-10-20 13:18
标题: TO:缘来是你
抱歉,是我没把问题说清楚,这个程序不是用来求10日移动最大值的,而是求N日内最大值。举例说明,要求股价不低于起始日(假如为1日)后N日最高价的95%,否则即抛出,如1日至3日,最高价为10元,则卖出触发价为9.5元;如3日至15日,最高价为20元,则卖出触发价为19元,所以在编程时,要求出N日内最大值,其中N日是一个变量,目前考虑用循环来解决,问题是要找出求N日内最大值的函数或者编程思路,最后再谢谢缘来是你,请您再继续解答问题。
作者: shiyiming    时间: 2008-10-20 14:37
标题: 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;
作者: shiyiming    时间: 2008-10-23 16:58
标题: 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
;
作者: shiyiming    时间: 2008-10-23 20:40
标题: Re: 如何在数组中求最大值-新手求救
没有多想,就使用sql语句吧,肯定能满足你的要求。result数据集就是你要的结果。至于用data步方法,我在想想,请其他朋友也帮忙想想啊:)
proc sql;
create table result as
select *,max(price) as max_price from aa group by time;
quit;




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2