正如标题所述,我在将日期时间从Excel导入SAS时遇到问题。问题似乎与秒有关:
这是来自excel的示例数据:
我的DateTime:
这是原始的excel数字:
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数字的扩展版本
答案 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文件时,请确保将该列读入一个字符变量而不是数字变量。