全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2778 2
2012-03-12
悬赏 50 个论坛币 未解决
详细数据见附件有excel和sas两种格式,下面是部分数据

dt

stock_code

vol

zlhy

20100507

IF1005

240106

1

20100507

IF1006

15275

20100507

IF1009

422

20100507

IF1012

873

20100510

IF1005

201919

1

20100510

IF1006

14788

20100510

IF1009

388

20100510

IF1012

1112

20100511

IF1005

224626

1

20100511

IF1006

19895

20100511

IF1009

564

20100511

IF1012

1227

20100512

IF1005

273131

1

20100512

IF1006

39181

20100512

IF1009

971

20100512

IF1012

1742

20100513

IF1005

217422

1

20100513

IF1006

35798

20100513

IF1009

644

20100513

IF1012

1289

20100514

IF1005

185453

1

20100514

IF1006

41143

20100514

IF1009

874

20100514

IF1012

1166

20100517

IF1005

117625

1

20100517

IF1006

101412

20100517

IF1009

1163

20100517

IF1012

1641

20100518

IF1005

40298

1

20100518

IF1006

261582

20100518

IF1009

1497

20100518

IF1012

2686

20100519

IF1005

14913

1

20100519

IF1006

340531

20100519

IF1009

2330

20100519

IF1012

4265

20100520

IF1005

7125

 

20100520

IF1006

293133

1

20100520

IF1009

1412

 

20100520

IF1012

3402

 

20100521

IF1005

3765

20100521

IF1006

307325

1

20100521

IF1009

1803

20100521

IF1012

4702



求主力合约


连续三个交易日的VOL最大,则该合约为主力合约(zlhy),

最初两个交易日VOL最大的合约为主力合约——IF1005,
第三个交易日则复合连续三个交易日VOL最大的合约——IF1005

到了20100518,IF1006的VOL已经是最大了,但是不符合连续三个交易日VOL最大的条件,则主力合约依然是之前的IF1005,直到20100520,IF1006的VOL已经复合连续三个交易日VOL最大,则IF1006为主力合约

二维码

扫码加我 拉你入群

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

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

全部回复
2012-3-14 00:20:52
可以以周为单位,用week(dt)产生周数或intck(‘week’,最早日期,dt),再用i=遍历,每次产生一周的数据,前两个交易日用sort by date vol就可以了,关键是后三个交易日,分析一周中的星期3,4,5,可用用weekday(dt)-1产生1,2,3,4,5.可以借鉴下面这个例子:
data c;
  input date name $ vol;
  cards;
  1 A 40
  1 B 100
  1 C 50
  1 D 200
  2 A 40
  2 B 80
  2 C 120
  2 D 20
  3 A 40
  3 B 100
  3 C 50
  3 D 200
  4 A 100
  4 B 80
  4 C 50
  4 D 20
  5 A 30
  5 B 10
  5 C 50
  5 D 50
  ;
run;
data d;
  set c;
  vol1=lag(lag(lag(lag(vol))));
  vol2=lag(lag(lag(lag(vol1))));
  if date in(3,4,5) then do;
  vol_sum=vol+vol1+vol2;
  end;
  else vol_sum=vol;
run;
proc sort data=d;
  by date vol_sum;
run;
data e;
  set d;
  by date;
  if last.date;
run;
e便是想要的数据,临时数据产生的较多,你改下覆盖掉。
二维码

扫码加我 拉你入群

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

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

2012-3-14 09:38:44
to:jjtww
1、为什么按周为单位呢?

2、你这个算法也没有达到我需要的结果
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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