SAS-Excel导入日期时间未保留足够的有效数字

时间:2019-04-01 13:18:45

标签: excel date datetime import sas

正如标题所述,我在将日期时间从Excel导入SAS时遇到问题。问题似乎与秒有关:

这是来自excel的示例数据:

我的DateTime:

enter image description here

这是原始的excel数字:

enter image description here

Edit2:

43417.58657407
43417.58656250

当我将它们导入SAS时,这就是SAS显示它们的方式:

13NOV2018:14:04:39
13NOV2018:14:04:39

和数值:

1857737079
1857737079

我正在尝试找出如何使SAS正确读取秒数的方法。我正在使用proc import,这是我的代码:

proc import
out = MyDSOutput
datafile= MyDSInput
dbms     = EXCEL replace;
sheet    = "page";
getnames = yes;
mixed    = yes;
scantext = yes;
usedate  = no;
scantime = yes;
textsize = 32767;
;
run;

编辑:我应该补充一点,将其转换为CSV确实不是一种选择,因为我的数字ID大于15位,而excel会将大于15位的任何数字都转换为0。

EDIT2:添加了原始excel数字的扩展版本

1 个答案:

答案 0 :(得分:1)

Excel将时间存储为一天的一小部分。当您这样做时,不可能精确地表示特定的秒数。 14:04:40(第二个数字50680)这个特定时间很难表示为浮点分数。如果将其表示为0.58657407,然后乘以一天中的秒数,则得到的秒数为50,679.999648,比您想要的要少。

尝试将DATETIME字段拆分为单独的DATE和TIME字段。这样,SAS将有更多的二进制数字来代表一天中的某个时间(因为一年中的一天中也不必具有40K或20K秒)。也许那会接近吗?或将值存储为Excel中的字符串,然后在SAS中使用INPUT()函数将字符串转换为日期时间值。

对于ID问题,如果可以避免,请勿在任何系统中将ID值存储为数字。如果您可以将ID存储在EXCEL文件中,则EXCEL可以将其写入CSV文件。但是,当您读取CSV文件时,请确保将该列读入一个字符变量而不是数字变量。