2017-06-20 484 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日之间的差异。