SAS:插入以离散时间间隔开始的时间序列

时间:2012-06-25 18:50:53

标签: sas interpolation

我有以下数据集结构:

date    time_in_hours   price   
Sep 03 08   9.76            98  
Sep 03 08   10.43           97  
Sep 03 08   10.98           96      
Sep 03 08   11.48           99      
Sep 04 08   2.35            98      
Sep 04 08   2.58            98.45       
Sep 04 08   3.45            96.3        
Sep 04 08   3.89            96.25       
Sep 04 08   4.18            100     
Sep 05 08   12.65           101     
Sep 05 08   12.96           100.25      
Sep 05 08   13.25           104.35      
Sep 05 08   13.78           98      

我的数据是2008年和2009年。它包含总共504个交易日。 我的目标是仅在9.5到16之间的时间间隔内每隔半小时(例如9.5 10 10.5 11 11.5 ......等)插入价格。

我一直在努力使用命令interpolate / aggregate,因为我必须为每个日历日期插入特定的时间间隔。我的最终输出还必须包含日期,时间和价格。像这样:

date    time_in_hours   price   
Sep 03 08   10           98  
Sep 03 08   10.5         97  
Sep 03 08   11           96      
Sep 03 08   11.5         99      
Sep 04 08   2.5          98      
Sep 04 08   3            98.45     

1 个答案:

答案 0 :(得分:1)

下面的代码为您提供了您所声明的输出,但基于上述所有评论,我不确定它是否会完全解决您的问题。注意,round(x,0.5)取0.25作为边界 - 所以2.74变为2.5而2.75变为3。

data test;
infile datalines dsd;
input date :$20. time_in_hours price;
datalines;
Sep 03 08,9.76,98
Sep 03 08,10.43,97
Sep 0308,10.98,96
Sep 03 08,11.48,99
Sep 04 08,2.35,98
Sep 04 08,2.58,98.45
Sep 04 08,3.45,96.3
Sep 04 08,3.89,96.25
Sep 04 08,4.18,100
Sep 05 08,12.65,101
Sep 05 08,12.96,100.25
Sep 05 08,13.25,104.35
Sep 05 08,13.78,98
;
run;

proc print;
run;

data test2;
    set test(rename = (time_in_hours = old_time_in_hours));
    time_in_hours = round(old_time_in_hours, 0.5);
    if (9.5 <= time_in_hours <= 16);
run;

proc print;
run;