全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
5255 4
2012-07-23

大家好,我是一个newbie,最近在处理一些股票数据,碰到一个问题,应该有比较简单的解决方法的,但是不知道用什么关键词可以搜索到,特来问一下,我的问题是:
我现在有一个股票数据库大致如下
----------------------------------
Date     Stock     Price     ...
1          A        10.1     ...
2          A        10.2     ...
4          A        11.1     ...
1          B        45.1     ...
2          B        43.2     ...
3          B        42.1     ...
1          C        24.1     ...
3          C        23.2     ...
4          C        22.1     ...
... ...
----------------------------------
可以看到日期是不全的,如A股票就少了day 3的数据,我想得到的最终结果是:
----------------------------------
Date     Stock     Price     ...
1          A        10.1     ...
2          A        10.2     ...
3          .        .        ...
4          A        11.1     ...
1          B        45.1     ...
2          B        43.2     ...
3          B        42.1     ...
4          .        .        ...
1          C        24.1     ...
2          .        .        ...
3          C        23.2     ...
4          C        22.1     ...
... ...
----------------------------------

可以看到,日期都被补全了。

我有大概400万个observation(大概300来支股票,50年数据),所以在思考是不是可以用join或者其他方式来做。各位大神谁有idea请一定不吝赐教!!感激不尽!!

二维码

扫码加我 拉你入群

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

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

全部回复
2012-7-23 09:17:39
最笨最容易想到的,创建一个数据集再datastep merge.
你的数据第一列是日期,我想可以用time series补齐.
data stock;
        input date date9. stock $ price;
        datalines;
01JUN2010 A 10.1
02JUN2010 A 10.2
04JUN2010 A 11.1
01JUN2010 B 45.1
02JUN2010 B 43.2
03JUN2010 B 42.1
01JUN2010 C 24.1
03JUN2010 C 23.2
04JUN2010 C 22.1
;
run;
proc sort data = stock;
        by stock date;
run;

proc timeseries data=stock out=want;
        id date interval=day accumulate=total setmissing = missing;
        var price;
        by stock;
        format date date9.;
run;
二维码

扫码加我 拉你入群

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

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

2012-7-23 09:27:41
海穹 发表于 2012-7-23 09:17
最笨最容易想到的,创建一个数据集再datastep merge.
你的数据第一列是日期,我想可以用time series补齐. ...
谢谢楼上大神!我这台电脑跑不了SAS,回学校后若成功了马上来反馈!


--------------------------------------


验证有效!!
二维码

扫码加我 拉你入群

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

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

2012-7-23 17:15:51
*你可以在sas.communities找到类似的问题;
data old;
do id=49,129,185;
  do monthi=1 to 12;
    lprice=-3-ranuni(0);
    output;
    end;
  end;
run;

data oldmiss;
set old;
if id=49 and monthi=10 then delete;
if id=129 and monthi in (2,3) then delete;
if id=185 and monthi in (5,6,7,8) then delete;
run;

proc print data=oldmiss;
title "Original raw data with month gaps";
run;


data new;
set oldmiss;
by id monthi;
if _N_=1 or first.id then do;
  month=1;
  end;
else do;
  month+1;
  end;
if month<monthi then do;
  lprice_hold=lprice;
  monthi_hold=monthi;
  do i=1 to monthi-month;
    lprice=0; monthi=month;
    output;
    month=month+1;
    end;
  lprice=lprice_hold;
  monthi=monthi_hold;
  output;
  end;
else output;
drop i monthi_hold lprice_hold month;
run;

二维码

扫码加我 拉你入群

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

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

2012-7-27 18:40:28
yugao1986 发表于 2012-7-23 17:15
*你可以在sas.communities找到类似的问题;
data old;
do id=49,129,185;
学习了
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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