我正在尝试从excel中的日期时间戳中提取日期。我目前有一个数据文件,其中包含日期格式,包括仅日期和日期时间戳。这导致我出现问题,因为我将数据导入SAS,并且它无法读取同一列下的仅日期和日期时间戳。
我已尝试在Excel中使用以下公式将时间戳转换为日期:
=DATEVALUE(DAY(E32) & "/" & MONTH(E32) & "/" & YEAR(E32))
这适用于excel并转换日期,以便它们的格式相同,因此可以解决时间戳的问题。但是,当我将数据导入SAS时,如果日期大于12,则会得到空值,即它将日期读为mm / dd / yyyy。例如:
Excel日期SAS导入日期 2016/12/09 09/12/2016 2016年12月15日#VALUE!
我尝试使用以下内容在excel中重新格式化,以确定它是否可以解决问题:
=DATEVALUE(MONTH(E32) & "/" & DAY(E32) & "/" & YEAR(E32))
但是我在excel中得到了相同的SAS错误。
任何人都可以帮助建议在excel中使用的公式,以解决此问题或将数据导入SAS的建议吗?
答案 0 :(得分:0)
听起来您的Excel数据是DMY格式,但SAS正在使用MDY。您可以通过运行以下代码来检查SAS:
proc options option=datestyle;
run;
如果是MDY,请更改(如果您在英国请求您的SAS管理员更改默认设置)
option datestyle='DMY';
您还可以查看locale
值,该值在英国为EN_GB
。此值确定使用日期时使用的datestyle
值。
proc options option=locale;
run;
答案 1 :(得分: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顺序表示的地点,该信息也应妥善处理15/10/2016。
如果您的日期始终在DMY订单中,则使用DDMMYY信息以防止LOCALE设置导致PROC IMPORT或ANYDTDTE信息将12/10/2016转换为12月10日而不是10月12日。但是,如果你的文本文件实际上有一些日期为第一顺序的日期和其他日期第一顺序的行,那么你真的需要一些额外的信息来正确地说出12月10日到10月12日之间的区别。