2017-06-20 142 views
0

我想從Excel中的日期時間戳中提取日期。我目前有一個數據文件,其中包含日期格式和日期時間戳。當我將數據導入到SAS中時,這會導致我遇到問題,並且無法在同一列下讀取僅日期和日期時間戳。在Excel和SAS導入中將時間戳轉換爲日期

我曾嘗試在Excel中使用下列公式時間戳轉換爲日期:

=DATEVALUE(DAY(E32) & "/" & MONTH(E32) & "/" & YEAR(E32)) 

這個工作在Excel和轉換,使他們都格式相同的日期,因此周圍的人的問題得到時間戳。但是,當我將數據導入到SAS中時,如果日期大於12,我會得到空值,即它將日期讀取爲mm/dd/yyyy。例如:

Excel Date SAS Import Date 09/12/2016 09/12/2016 15/12/2016 #VALUE!

我試着用下面來看看它是否會得到解決的問題,在Excel中格式化的:

=DATEVALUE(MONTH(E32) & "/" & DAY(E32) & "/" & YEAR(E32)) 

但後來我得到同樣的SAS Excel中錯誤。

任何人都可以幫助建議一個公式在Excel中使用,將解決此問題或建議將數據導入到SAS?

+1

你如何將它導入SAS?你有什麼版本的SAS? – Quentin

+0

使用proc import語句: proc import \t DATAFILE =「Data file1.csv」 \t OUT = data DBMS = csv; GETNAMES = YES; 跑; – amy

+0

另外我正在使用Base SAS 9.4 – amy

回答

0

聽起來您的Excel數據是DMY格式,但SAS使用的是MDY。

proc options option=datestyle; 
run; 

如果是MDY,然後改變它(如果你在英國是問你的SAS管理員更改默認設置)

option datestyle='DMY'; 
:您可以通過運行下面的代碼檢查SAS

您還可以查看locale的價值,這在英國將是EN_GB。此值確定使用日期時使用的datestyle值。

proc options option=locale; 
run; 
0

如果你問SAS從一個XLSX文件導入,那麼它應該能夠告訴該列包含日期,其顯示格式獨立的您已連接到電池。確保單列中的所有單元格都是相同類型的數據並使用相同的顯示格式。

CSV文件不是Excel文件,因此無法放置公式或任何有關每列中的數據類型的元數據。如果您使用PROC IMPORT讀取CSV文件,則SAS必須猜測CSV中每列的數據類型。如果您要將Excel文件另存爲CSV文件,以便以後讀入SAS或其他軟件,則應在Excel中使用yyyy/mm/dd格式格式化日期列,以防止月份和日期訂單的不同默認值可能導致混淆。沒有人使用YDM訂單。

由於CSV文件只是一個文本文件,如果您想完全控制SAS如何讀取日期字符串,那麼只需編寫數據步驟即可自行讀取。您可以運行PROC IMPORT,然後調用它生成的代碼並修改它以讀取您的數據。您可以將字符串讀入字符變量,然後使用INPUT()函數編寫自己的語句進行轉換。

如果該列有一些日期值和一些日期時間值,那麼您可以嘗試使用ANYDTDTE信息來拉取日期部分。即使您的LOCALE設置適用於美國或其他日期通常以MDY順序而非DMY順序表示的地點,該信息也應妥善處理。

如果您的日期始終在DMY訂單中,那麼請使用DDMMYY信息來防止LOCALE設置導致PROC IMPORT或ANYDTDTE信息將12/10/2016轉換爲12月10日而非10月12日。但是如果你的文本文件實際上有一些行的日期以一月份的順序排列,而另一些則是一天的順序,那麼你真的需要一些額外的信息來正確地分辨出12月10日和10月12日之間的差異。