如何将sas中以整数表示的日期转换为excel日期

2018-02-22 更新:在新版本的 pandas 中,这个问题已经不存在,所有日期格式均可以无损地识别。详见我的另一篇博文:在python中使用pandas将SAS数据集 (.sas7bdat) 转换为dataframe, excel或csv格式

SAS中以整数表示的是日期和时间与excel中的日期和时间是不同的,使用python的sas7bdat包将sas数据集转换为Pandas Dataframe或导出为csv格式后在,得到的日期会不正确。

如何在python中将sas日期转换为excel日期呢?请看下面的代码:

import pandas as pd

mydata = [{'DATE_1':19908, 
           'DATE_2':19909, 
           'DATE_3':19910}]
df = pd.DataFrame(mydata)

# date fields to be converted
date_fields = ['DATE_1', 'DATE_2', ]  # We do not convert DATE_3

for date in date_fields:
    df[date] = df[date] + 21916

print(df)

输出:

   DATE_1  DATE_2   DATE_3
0   41824   41825    19910

输出的结果数字序列在excel中代表日期2014年7月4日,2014年7月5日和1954年7月5日。其中的DATE_3没有转换,因此它对应的日期在excel中是错误的。

转换时给SAS日期的数字序列加21916,是因为SAS中的日0代表的是1960年1月1日,而excel中的0代表的是1999年12月30日,这两个日期之间相差21916天。


Posted

in

by

Tags:

评论 Comments

One response to “如何将sas中以整数表示的日期转换为excel日期”

  1. […] 2. 如果您的pands版本早于0.22,则在导入sas7bdat数据集时,非MMDDYY格式的日期会被作为数值导入,因此导入后日期会相差21916天,这是一个bug,参见我的另一篇早期博文:如何将sas中以整数表示的日期转换为excel日期.  从0.22版本开始,该bug已被修复,几乎所有的日期格式均能被正确地导入。因此,最省心的做法是将您的pandas升级到最新版本。 […]

Leave a Reply

Your email address will not be published. Required fields are marked *