如何将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天。

“如何将sas中以整数表示的日期转换为excel日期”的一个回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注