繁体   English   中英

Python sas7bdat模块用法

[英]Python sas7bdat module usage

我必须从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')

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

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

谢谢,所有。

这只是部分答案,因为我没有找到[易于阅读]的具体文档。

您可以在此处查看源代码

这显示了有关方法所需参数的一些基本信息,例如:

  • readColumnAttributes(self,colattr)
  • readColumnLabels(self,collabs,coltext,colcount)
  • readColumnNames(self,colname,coltext)

我认为你所使用的大部分内容存储在使用SAS7BDAT创建对象时返回的“header”类中。 如果您只是打印该类,您将获得大量信息,但您也可以访问类属性。 我认为你可能正在寻找的大部分内容都在foo.header.cols之下。 我怀疑你使用各种标头属性作为你提到的方法的参数。

也许这样的事情会让你更接近?

from sas7bdat import SAS7BDAT
foo = SAS7BDAT(inFile) #your file here...

for i in foo.header.cols:
    print '"Atrributes"', i.attr
    print '"Labels"', i.label
    print '"Name"', i.name

编辑:与此特定问题无关,但在尝试弄清楚不熟悉的类/库中发生了什么时, type()dir()命令会派上用场

我个人认为更好的方法是使用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;

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

我知道我迟到的答案,但万一有人搜索类似的问题。 最好的选择是:

import sas7bdat
from sas7bdat import *
foo = SAS7BDAT('/support/sas/locked_data.sas7bdat')
# This converts to dataframe:
ds = foo.to_data_frame()

随着时间的推移,解决方案变得更容 我想如果你想和熊猫一起工作,这个最简单:

import pandas as pd
df = pd.read_sas('/support/sas/locked_data.sas7bdat')

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM