在python中使用pandas将SAS数据集 (.sas7bdat) 转换为dataframe, excel或csv格式

pandas 是 python 中强大的数据分析库。在早期,pandas 只支持 xport (.XPT) 格式的导入,那时如果想要导入 sas7bdat 格式,需要借助 pipy 上的第三方包 sas7bdat。幸运的是,从 0.18 版本开始,这个第三方 sas7bdat 包已原生包含在了 pandas 的 read_sas 中。

用法:

import pandas as pd

sas7bdat_file = "/path/to/sample.sas7bdat"
df = pd.read_sas(sas7bdat_file) # 得到的是一个标准的 pandas.dataframe 对象

df.head() # 显示前面几行
df.tail() # 显示结尾几行

df.to_csv("/path/to/sample.csv")

需要注意的是,早期版本中虽然支持将 *.sas7bdat 中的日期字段导出为日期类型的 dataframe 列,但是只支持 “MMDDYY”格式的日期(其实是个 bug);对于其他格式的日期,会被认为是数值,因此导出到 csv 后如果用 Excel, LibreOffice 等电子表格软件打开,日期会相差21916天(参见我的另一篇早期博文:如何将sas中以整数表示的日期转换为excel日期

幸运的是,从 panas 0.22 版本开始,这一缺陷已经不存在,几乎所有的日期格式已被支持,已不需要进行额外的转换。

如果您的 pandas 版本低于当前 PyPi 上的最新版本,建议您立即更新。更新方法:

# 列出过时的软件包:
pip3 list --outdated

# 更新 pandas:
pip3 install -U pandas

 

进入 SAS University Edition 内部一探究竟

SAS University Edition 采用了虚拟化技术,提供virtualbox和vmware镜像供用户使用,运行时客户机内部在Centos 操作系统之上 (笔者的版本运行的是Centos 6.8 Final) 运行着SAS各个组件以及Apache web服务器、mysql数据库等,宿主机通过将10080端口转发到客户机的80端口进行通信,所有SAS编程任务均在网页中完成。这与将SAS安装到本地服务器然后运行是一样的,只不过用户表面上无法查看或更改其服务器配置。

但是,虚拟机镜像其实是虚拟的磁盘文件,文件系统格式为linux ext4, 因此,将SAS University Edition vmdk磁盘文件添加到一个空的虚拟机,然后使用任何linux发行版的iso启动即可挂载它(或者现有的linux虚拟机中挂载)。

见图:

在 Python 中计算两组数据的 Cohen’s D 效应值

今日研究美国商务部的NME倾销幅度计算程序,对DOC的 Differential Price Analysis 有了初步的理解。DOC在进行价格差异分析时,使用了Cohen’s D统计方法,来测试应诉企业的美国销售价格是否在不同的季度、不同的区域/州、不同的客户之间具有明显差异。

美国商务部的分析是在SAS中进行的。以下代码显示了如何在python中进行 Cohen’s D 的计算: 继续阅读“在 Python 中计算两组数据的 Cohen’s D 效应值”

使用python语言进行全年一次性奖金个人所得税计算以及临界值分析

按照税务局的规定,员工的全年一次性奖金每年可享受一次按照除以12的商数确定税率计算个人所得税的优惠算法。网上又有人说该算法下存在个人所得税的盲区,在该盲区内多发1元奖金将会使交的税比增加的奖金还多。

为了验证该说法,我曾尝试在LibreOffice中用电子表格下公式进行计算,但是由于公式复杂且数据量大,很难完成。最终发现使用python配合pandas库可以非常快速地完成计算。 继续阅读“使用python语言进行全年一次性奖金个人所得税计算以及临界值分析”