楼主: izzibera
2988 8

[原创博文] 请教如何求过去一年股价的最大值? [推广有奖]

  • 0关注
  • 0粉丝

高中生

65%

还不是VIP/贵宾

-

威望
0
论坛币
17 个
通用积分
0
学术水平
1 点
热心指数
1 点
信用等级
0 点
经验
390 点
帖子
38
精华
0
在线时间
27 小时
注册时间
2009-4-22
最后登录
2011-11-28

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
数据是这么排的
code date price
1 20080101 11
1 20080102 12
...
1 20100329 23
2 20080101 11
...

不是求所有日期的最大值,而是针对每一天,求过去一年最大值

另外我的日期都是数值best12.型,请问怎么转成日期型阿?
二维码

扫码加我 拉你入群

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

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

关键词:最大值 Price date Rice code 最大值 如何

回帖推荐

soporaeternus 发表于9楼  查看完整内容

闰年的问题之前SQL的方法不需要考虑,这个方法我没认真考虑 希望是对的 这个方法快很多。。。。。。

luijb 发表于2楼  查看完整内容

data raw; input code date yymmdd8. price; year=year(date); cards; 1 20080101 11 1 20080102 12 1 20100329 23 2 20080101 11 ; run; proc sort data=raw; by code year price; data result; set raw; by code year; if last.year; run;

本帖被以下文库推荐

沙发
luijb 在职认证  发表于 2010-3-30 13:22:51 |只看作者 |坛友微信交流群
data raw;
input code date yymmdd8. price;
year=year(date);
cards;
1 20080101 11
1 20080102 12
1 20100329 23
2 20080101 11
;
run;
proc sort data=raw;
by code year price;
data result;
set raw;
by code year;
if last.year;
run;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

西格玛临床统计服务工作室http://www.sigma-stat.com/,luijb@163.com

使用道具

藤椅
soporaeternus 发表于 2010-3-30 13:42:27 |只看作者 |坛友微信交流群
1 最直观的办法是和自己做笛卡儿积,时间小于1年,max(price)
数据量大的话,效率很低......

2 data步生成最大值拉链表,再连一下,可能效率好点

使用道具

板凳
izzibera 发表于 2010-3-30 16:11:40 |只看作者 |坛友微信交流群
请问最大值拉链表是什么意思,我研究了一下午SQL,发现还是解决不了

3# soporaeternus

使用道具

报纸
crackman 发表于 2010-3-30 16:27:20 |只看作者 |坛友微信交流群
我也想知道
谢谢

使用道具

地板
soporaeternus 发表于 2010-3-30 17:00:48 |只看作者 |坛友微信交流群
  1. data test;
  2.         do code=1 to 4 by 1;
  3.                 do date="01Jan1999"d to "31Dec2009"d by 1;
  4.                         price=code+ranuni(0)*3;
  5.                         output;
  6.                 end;
  7.         end;
  8.         format date yymmdd10.;

  9. run;

  10. proc sql;
  11.         create table R_1 as
  12.                 select
  13.                         a.*
  14.                 ,max(b.price) as R1m_Max_Price
  15.                 from test a
  16.                 inner join test b
  17.                 on        a.code=b.code
  18.                 and b.date between intnx("YEAR",a.date,-1,"SAMEDAY")+1 and a.date
  19.                 group by        a.code,a.date,a.price
  20.         ;
  21. quit;
复制代码
这是第一种傻办法,也就是方法1
数据量大的话很慢

后面一种等等下班回家再上......

使用道具

7
paladin112 发表于 2010-3-30 17:02:50 |只看作者 |坛友微信交流群
假设楼主的数据是这样的:
data a;
input code:$6. date:best12. price;
datalines;
1 20080709 15
1 20090102 20
1 20090301 11
1 20100102 12
1 20100329 23
2 20080101 10
2 20090102 28
2 20090301 19
2 20100102 32
2 20100329 43
;
run;
楼主可以通过下面的语句,将这个date转化成日期格式:
data a0;
set a;
newdate = mdy(substr(trim(left(put(date,$8.))),5,2),substr(trim(left(put(date,$8.))),7,2),substr(trim(left(put(date,$8.))),1,4));
format newdate yymmdd10.;
run;
另外不清楚楼主所说的一年是对每个code都是这个范围么?
如果是的话,不知道这样能否满足楼主的要求:

%let day2=%sysfunc(mdy(1,2,2010));
%let day1=%eval(&day2-365);
proc summary data = a0(where = (&day1<=newdate<=&day2));
var price;
by code;
output out = a1(drop = _TYPE_ _FREQ_) max=;
run;

使用道具

8
soporaeternus 发表于 2010-3-30 17:09:34 |只看作者 |坛友微信交流群
细想下,拉链实现不了,别的算法我再想想,实在不好意思,误导了

使用道具

9
soporaeternus 发表于 2010-3-30 23:12:28 |只看作者 |坛友微信交流群
  1. data R_2;
  2.         retain  p1-p366 .;
  3.         set test;
  4.         by code date;
  5.         array x p1-p366;
  6.         if first.code then do;
  7.                 do i=1 to dim(x);
  8.                         x(i)=.;
  9.                 end;

  10.         end;

  11.         do i=dim(x) to 2 by -1;
  12.                 x(i)=x(i-1);
  13.         end;
  14.         p1=price;
  15.         if sum(date,-intnx("year",date,-1,"sameday"))=365 then R1m_Max_Price=max(of p1-p365);
  16.         else R1m_Max_Price=max(of p1-p366);
  17.         keep code date price R1m_Max_Price;
  18. run;
复制代码
闰年的问题之前SQL的方法不需要考虑,这个方法我没认真考虑
希望是对的
这个方法快很多。。。。。。
已有 3 人评分经验 论坛币 学术水平 热心指数 收起 理由
bakoll + 3 + 3 精彩帖子
crackman + 1
jingju11 + 1 so good

总评分: 经验 + 3  论坛币 + 3  学术水平 + 1  热心指数 + 1   查看全部评分

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-21 23:30