从CRSP cloud上直接下载的数据,大部分都是SAS的特定格式sas7bdat,如果不用SAS进行分析,需要重新转换为csv格式。
以S&P 500的成分股数据为例,我们从CRSP cloud上下载得到dsp500list.sas7bdat后,可以用Python的sas7bdat库,对它进行读取和处理。
由于SAS有特定的日期格式,转换后日期格式就变成了一个小数部分为0的float,因此我们最好将它再转换成Python的datetime格式。转换规则是,以1960年1月1日为起点,然后每过一天就加1。规则非常简单,直接用pandas.to_datetime()函数进行转换即可。
整个代码如下。
import numpy as np
import pandas as pd
from sas7bdat import SAS7BDAT
SAS_df = SAS7BDAT('dsp500list.sas7bdat', encoding="gb2312").to_data_frame()
SAS_df["PERMNO"] = SAS_df["PERMNO"].astype('int')
SAS_df['start'] = pd.to_datetime(SAS_df['start'], unit='D', origin='1960-01-01')
SAS_df['ending'] = pd.to_datetime(SAS_df['ending'], unit='D', origin='1960-01-01')
SAS_df.to_csv("dsp500list.csv")
网友评论