2015-09-22 146 views
0

我正在處理不同版本中的大量觀察值。如何將日期時間轉換爲SAS格式

我將使用日期%let date_to_view = "20JAN2014:16:10"dt; 但如何將此日期轉換爲SAS格式?

我知道如何轉換的SAS數據類型(使用PROC SQL):

dhms("01JAN1970'd,3,0,i.valid_dttm/1000) format datetime20. 

我看到日期20JAN2014:16:34:101390224849927,但如何將它轉換成代碼?

+0

日期時間值,你發佈與您發佈的整數值不匹配。你發佈的號碼太大了。 2014年1月的特定時間應該只有1,705,854,85​​0的儲值。 – Tom

回答

3

在您的公式dhms("01JAN1970'd,3,0,i.valid_dttm/1000)要轉換一個數字,表示自01JAN1970毫秒錶示,因爲01JAN1960的秒數SAS日期時間值的數量。你似乎也在增加3個小時。

所以它聽起來像你的問題是如何將SAS DATETIME值轉換爲Unix時間戳值。所以只需反轉算術。

公式從Unix時間戳轉換爲SAS日期時間爲:

sasdt2 = '01JAN1970:00:00'dt + '03:00't + unix_timestamp2/1000 ; 

所以從SAS日期時間值轉換爲Unix時間戳使用:

unix_timestamp1 = 1000*(sasdt1 - '01JAN1970:00:00'dt - '03:00't) ; 
+0

哦謝謝。我不擅長格式化Unix等,但它將1.39022249E12如何格式化爲'1390224849927'? – bobby1232

+0

格式只在打印時纔有意義。它不會更改存儲的值。你只需要計算你需要的位數。長度('1390224849927')爲13.因此,如果使用格式13(也稱爲F13)。或者任何更長的時間也將工作。 – Tom

+1

謝謝!你很不錯! – bobby1232

1

「20JAN2014:16:10」dt已經處於正確的SAS日期(日期時間)格式,但是作爲日期文字。 SAS將其存儲爲一個數字,表示從01年1月01日00:00:00開始的秒數。

如果您只是想要日期時間的日期組件,請使用datepart()函數,並相應地設置結果的格式,例如, date9.

 
data want ; 
    dt = "20JAN2014:16:10"dt ; 
    date = datepart(dt) ; 
    format dt datetime19. date date9. ; 
    /* To have 'date' show as the unformatted value, simply remove the format */ 
    format date best32. ; 
run ; 
+0

謝謝你的評論BU我需要日期是「1390224849927」我怎麼能得到他的格式? – bobby1232

+0

我得到了'1705854850'仍然不是1390224849927錯誤...我確定約會的原因我得到20JAN2014:16:10從1390224849927 – bobby1232

+0

我不確定你從哪裏得到1390224849927。 「20JAN2014:16:10」dt將導致1705853400.除非您指定格式(例如date9。,datetime。),否則SAS日期和日期時間文字將始終顯示爲數字。你能發表你寫到1390224849927的代碼嗎? –

相關問題