楼主: xuchao_wuxi
1446 3

[程序分享] 求助,如何补齐交易数据 [推广有奖]

  • 0关注
  • 1粉丝

已卖:1051份资源

博士生

16%

还不是VIP/贵宾

-

威望
0
论坛币
48528 个
通用积分
3.3007
学术水平
2 点
热心指数
3 点
信用等级
2 点
经验
3814 点
帖子
104
精华
0
在线时间
176 小时
注册时间
2007-8-5
最后登录
2019-9-19

楼主
xuchao_wuxi 发表于 2017-9-9 07:01:02 |AI写论文
60论坛币

求助:最近在编程,想把没有交易的数据补齐,具体如下:
现有数据是2014-2017年以来所有的债券交易数据,该数据集仅包含每只债券有交易日的数据,如果某只债券在某个交易日没有交易,则该交易日的数据中,是不含这只债券的任何信息。
因此,我想把在交易日没有交易的债券数据补齐,用之前最近一个有交易的数据补齐到该无交易日,即,假设债券A在T日有过交易,下一次交易是T+6日,我想把T+1至T+5之间的交易数据用T日的实际交易数据补齐。

现有的数据格式如下:
date

code

name

Price

YTM

volum

duration

tudu

2016-03-31

150218.IB

15国开18

103.7198

3.2738

1680000.00

8.0082

74.4721

2016-03-31

160401.IB

16农发01

100.0196

2.4301

634000.00

0.7699

1.2987

2016-03-31

150210.IB

15国开10

106.5665

3.3550

625000.00

7.4693

66.4642

2016-03-31

160408.IB

16农发08

100.0991

3.3575

473000.00

8.5682

83.2349

2016-03-31

150207.IB

15国开07

102.8417

2.7050

441000.00

1.8921

5.3589

2016-03-30

150405.IB

15农发05

104.3136

3.4000

332000.00

7.6888

67.7383

2016-03-30

150220.IB

15国开20

101.7638

3.0300

322000.00

4.1675

21.1054

2016-03-30

150208.IB

15国开08

104.1179

3.0300

319000.00

3.6673

17.0548

2016-03-30

150413.IB

15农发13

100.0260

2.4498

309000.00

0.1425

0.1551

2016-03-30

150211.IB

15国开11

100.0795

2.4101

298000.00

0.1151

0.1223

2016-03-30

150414.IB

15农发14

101.4893

2.7114

262000.00

2.0449

6.0478


关键词:SAS

沙发
l1i2n3i4n5g 在职认证  发表于 2017-9-9 07:01:03
xuchao_wuxi 发表于 2017-9-9 21:42
运行了一下还是不对啊,因为债券A在T+1日没有交易时,T+1交易日的一整行数据都是缺失的。
  1. data old;
  2. input date yymmdd10.        code $12.        name $10.        Price        YTM        volum        duration        tudu;
  3. format date yymmdd10.;
  4. cards;
  5. 2016-3-31        150218.IB        15国开18        103.7198        3.2738        1680000        8.0082        74.4721
  6. 2016-3-31        160401.IB        16农发01        100.0196        2.4301        634000        0.7699        1.2987
  7. 2016-3-31        150210.IB        15国开10        106.5665        3.355        625000        7.4693        66.4642
  8. 2016-3-31        160408.IB        16农发08        100.0991        3.3575        473000        8.5682        83.2349
  9. 2016-3-31        150207.IB        15国开07        102.8417        2.705        441000        1.8921        5.3589
  10. 2016-3-30        150405.IB        15农发05        104.3136        3.4        332000        7.6888        67.7383
  11. 2016-3-30        150220.IB        15国开20        101.7638        3.03        322000        4.1675        21.1054
  12. 2016-3-30        150208.IB        15国开08        104.1179        3.03        319000        3.6673        17.0548
  13. 2016-3-30        150413.IB        15农发13        100.026        2.4498        309000        0.1425        0.1551
  14. 2016-3-30        150211.IB        15国开11        100.0795        2.4101        298000        0.1151        0.1223
  15. 2016-3-30        150414.IB        15农发14        101.4893        2.7114        262000        2.0449        6.0478
  16. ;
  17. run;

  18. proc sql noprint;
  19.         create table date_list as
  20.         select distinct date from old;
  21.         create table code_list as
  22.         select distinct code, name from old;
  23.         create table data_code_list as
  24.         select * from date_list, code_list;
  25.         create table new as
  26.         select * from data_code_list as a left join old as b
  27.         on a.date=b.date and a.code=b.code;
  28. quit;

  29. proc sort data=new;
  30.         by code date;
  31. run;

  32. data new;
  33.         set new;
  34.         by code date;
  35.         retain price_temp YTM_temp volum_temp duration_temp tudu_temp;
  36.         if not missing(price) or first.code then do;
  37.                 price_temp=price;
  38.                 YTM_temp=YTM;
  39.                 volum_temp=volum;
  40.                 duration_temp=duration;
  41.                 tudu_temp=tudu;
  42.         end;
  43.         else do;
  44.                 price=price_temp;
  45.                 YTM=YTM_temp;
  46.                 volum=volum_temp;
  47.                 duration=duration_temp;
  48.                 tudu=tudu_temp;
  49.         end;
  50. run;
复制代码

藤椅
l1i2n3i4n5g 在职认证  发表于 2017-9-9 10:09:25
proc sort data=old;
by code date;
run;
data new;
set old;
retain price_temp;
if not missing(price) or first.code then price_temp=price;
else price=price_temp;
run;

板凳
xuchao_wuxi 发表于 2017-9-9 21:42:20
l1i2n3i4n5g 发表于 2017-9-9 10:09
proc sort data=old;
by code date;
run;
运行了一下还是不对啊,因为债券A在T+1日没有交易时,T+1交易日的一整行数据都是缺失的。

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-21 12:54