在发布之前,我尝试了谷歌,但没有太多帮助。
我在列中有一个具有此值的Excel 文件Opened_DT
:1448300037,15。Excel 只显示一堆######字符而不是日期。
我已经得到了这个文件,但不知道日期格式应该是什么实际输出。它应该说明在机构开设账户的日期。我需要将此 Excel 列导入SAS
数据集,但这个字符串让我发疯:(我尝试了一堆转换实用程序和插件,但没有运气。
有人可以告诉我如何使用 SAS 阅读本专栏吗?
在发布之前,我尝试了谷歌,但没有太多帮助。
我在列中有一个具有此值的Excel 文件Opened_DT
:1448300037,15。Excel 只显示一堆######字符而不是日期。
我已经得到了这个文件,但不知道日期格式应该是什么实际输出。它应该说明在机构开设账户的日期。我需要将此 Excel 列导入SAS
数据集,但这个字符串让我发疯:(我尝试了一堆转换实用程序和插件,但没有运气。
有人可以告诉我如何使用 SAS 阅读本专栏吗?
从您的示例看来,初始数据是错误的:这是 Excel 2007 向我展示的:
确实,实际值太大了Date
——因为今天的日期序列号是41335
。请确保您的应用程序计算正确的Opening_DT
值。
根据Excel 规范和限制:
Latest date allowed for calculation December 31, 9999
Largest amount of time that can be entered 9999:59:59
序列号December 31, 9999
是2958465
.
在我看来,您的 Excel 工作表中的列是使用某种将小数点转换为逗号的技术创建的。引用的示例值 ( 1448300037,15 ) 相当于 SAS 时间戳22NOV2005:17:33:57.15
。
如果该值是合法的并且您想将其转换为 SAS 数据集,我建议在 Excel 中将该列格式化为 TEXT,将其保存为新工作簿,然后使用 PROC IMPORT 将该新工作簿读入 SAS。然后对结果进行后处理以将该变量重新读取为 SAS 日期时间变量。为了显示:
proc import out=have
datafile="path-to-workbook\workbook.xlsx"
replace
dbms=excel;
sheet="sheetname";
run;
data want;
set have(rename=(Open_DT=prevOpen_DT));
format Open_DT datetime21.2;
Open_DT = input(prevOpen_DT,numx13.2);
drop prevOpen_DT;
run;
语句中使用的numx
SAS 信息input
读取字符变量并将逗号解释为小数点。
我假设您所在地区的小数分隔符是逗号,所以 1448300037,15 是一个有效数字......
如果这表示从 1960 年 1 月 1 日开始的秒数,那么在 Excel 中,您可以通过将开始日期(1960 年 1 月 1 日)添加到以天数表示的数字(您可以通过除以一天中的秒数),因此对于 A2 中的数据,请使用此公式
=DATE(1960,1,1)+A2/86400
并格式化为日期/时间,例如dd.mm.yyyy hh:mm
使列宽更宽。如果数据不合适,Excel 有时会显示哈希值。