Python sas7bdat模块用法

at_*_*sea 8 python sas

我必须从SAS数据集转储数据.我找到了一个名为sas7bdat.py的Python模块,它说它可以读取SAS .sas7bdat数据集,我认为由于需要其他功能,用Python而不是SAS来完成项目会更简单,更直接.但是,交互式Python中的帮助(sas7bdat)不是很有用,我能够找到转储数据集的唯一示例如下:

import sas7bdat
from sas7bdat import *
# following line is sas dataset to convert
foo = SAS7BDAT('/support/sas/locked_data.sas7bdat')
#following line is txt file to create
foo.convertFile('/support/textfiles/locked_data.txt','\t')
Run Code Online (Sandbox Code Playgroud)

这不符合我的要求,因为a)它使用SAS变量名作为列标题,我需要它使用变量标签,b)它使用"nan"来表示缺少的数值,我宁愿离开值空白.

有人能指出一些关于sas7bdat.py中包含的方法的有用文档吗?我用Google搜索了我能想到的关键词的每一个排列,没有运气.如果没有,有人可以给我一个或两个使用readColumnAttributes(),readColumnLabels()和/或readColumnNames()的例子吗?

谢谢,所有.

Gui*_*ido 9

随着时间的推移,解决方案变得更加容易。我认为如果你想使用 pandas,这是最简单的:

import pandas as pd
df = pd.read_sas('/support/sas/locked_data.sas7bdat')
Run Code Online (Sandbox Code Playgroud)

请注意,通过使用很容易获得 numpy 数组df.values


Ale*_* A. 2

我个人认为更好的方法是使用 SAS 导出数据,然后根据需要使用 Python 处理外部文件。

在 SAS 中,您可以这样做...

libname datalib "/support/sas";
filename sasdump "/support/textfiles/locked_data.txt";

proc export
    data = datalib.locked_data
    outfile = sasdump
    dbms = tab
    label
    replace;
run;
Run Code Online (Sandbox Code Playgroud)

这样做的缺点是,虽然使用列标签而不是变量名称,但标签用双引号引起来。在 Python 中处理时,如果它们引起问题,您可能需要以编程方式删除它们。我希望这会有所帮助,即使它没有像您想要的那样使用 Python。