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の間の時間間隔についてのみ、30分ごとに価格を補間することです(例: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 に答える