1

我有以下数据集结构:

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     
4

1 回答 1

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;
于 2012-06-26T11:03:16.493 回答