2012-06-25 55 views
1

一個時間序列,我有以下數據集結構:SAS:插值開始的離散時間間隔

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 10 10.5 11 11.5 ...等)只對時間間隔9.5和16

之間我一直在用命令插值奮力/總給我必須針對每個日曆日期的特定時間間隔進行插值。我的最終輸出還必須包含日期,時間和價格。事情是這樣的:

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  
+0

你想要輸出看起來像什麼? – itzy

+0

Hi @itzy 2008年和2009年,每個工作日9.5到16小時之間,最終產量必須在每半小時的時間間隔內有價格。 – Plug4

+1

您是如何計算這些價格的?爲什麼價格在11 99?你真的不應該做任何插值;你只需要將時間總結到下一個半小時,然後用最後一個好價格填寫缺失的時間。 – itzy

回答

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; 
+0

您也可以考慮以毫秒爲單位對原始時間進行操作,而不是將其轉換爲小時。當然,邏輯將會改變。 –

+0

非常棒!非常感謝。我不知道你可以使用'round'來以0.5來回合。很有幫助! – Plug4

+0

插值價格是什麼? – stevepastelan

相關問題