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

时间:2013-03-02 11:15:02

标签: excel sas

在发布之前,我尝试了Google,但没有提供太多帮助。

我在 Opened_DT 栏中有一个 Excel文件,此值为 1448300037,15 。 Excel仅显示一堆 ###### 字符而不是日期。

我收到了这个文件,不知道日期格式应该是什么实际输出。它应说明与机构开立帐户的日期。我需要将这个Excel列导入SAS数据集,但这个字符串让我发疯:(我尝试了一堆转换实用程序和插件,但没有运气。

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

以下是my Excel workbook

的示例

4 个答案:

答案 0 :(得分:3)

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

Screenshot from Excel

实际上,实际值太大而不能Date - 今天的日期序列号为41335。请确保您的应用程序正确计算Opening_DT值。

根据Excel specifications and limits

Latest date allowed for calculation         December 31, 9999
Largest amount of time that can be entered  9999:59:59

December 31, 9999的序列号为2958465

答案 1 :(得分:1)

在我看来,Excel工作表中的列是使用一些将小数点转换为逗号的技术创建的。引用的示例值( 1448300037,15 )相当于22NOV2005:17:33:57.15的SAS时间戳。

如果该值是合法的并且您想将其转换为SAS数据集,我建议将该列格式化为Excel中的TEXT,将其另存为新工作簿,并使用PROC IMPORT将该新工作簿读入SAS。然后对结果进行后处理,以将该变量重新读取为SAS datetime变量。举例说明:

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语句中使用的input SAS信息读取字符变量并将逗号解释为小数点。

答案 2 :(得分:1)

我假设您的区域小数分隔符是逗号,所以1448300037,15是有效数字......

如果它代表从1960年1月1日开始的秒数,那么在Excel中您可以通过将开始日期(1960年1月1日)添加到您的数字表示为天数(您可以通过除以以下数字得到)来转换为有效日期/时间一天中的秒数,因此A2中的数据使用此公式

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

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

答案 3 :(得分:0)

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