如何使用SAS从Excel读取不正确格式的列

在发布之前,我尝试了谷歌,但没有很多的帮助。

我有一个在Opened_DT列中有这个值的Excel文件1448300037,15 。 Excel只显示一堆######字符而不是date。

我已经得到这个文件,不知道date格式应该是什么样的实际输出。 它应该说明一个帐户已经与一个机构开设的date。 我需要将这个Excel列导入SAS数据集,但是这个string让我疯狂:(我尝试了一堆转换工具和插件,但没有运气。

有人可以告诉我如何使用SAS阅读本专栏?

这是我的Excel工作簿的一个例子

从您的示例看,最初的数据是错误的:这是Excel 2007向我展示的内容:

从Excel的屏幕截图

事实上,实际价值太大,不能成为Date – 今天的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工作表中的列是使用某些将小数点转换为逗号的技术创build的。 引用的示例值( 1448300037,15 )相当于22NOV2005:17:33:57.15的SAS时间戳。

如果这个值是合法的,并且想把它变成一个SAS数据集,我build议在Excel中将该列设置为TEXT格式,将其保存为一个新的工作簿,然后使用PROC IMPORT将该新工作簿读入SAS。 然后对结果进行后处理,重新读取该variables作为SASdate时间variables。 为了显示:

 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; 

input语句中使用的numx SAS信息将读取字符variables并将逗号解释为小数点。

我假设你的地区十进制分隔符是逗号,所以1448300037,15是一个有效的数字……

如果这代表从1960年1月1日开始的秒数,那么在Excel中,可以通过将开始date(1960年1月1日)添加到表示为天数的数字中,将其转换为有效的date/时间(可以通过除以一天中的秒),所以A2中的数据使用这个公式

=DATE(1960,1,1)+A2/86400

并格式化为date/时间,例如dd.mm.yyyy hh:mm

使列宽变宽。 如果数据不适合,Excel有时会显示哈希值。