导入数据文件 SAS 在数据帧中 python

我在一组数据上工作 /PSID/, 它以格式提供数据 SAS /a .txt 还有一个包含解释数据说明的文件/. 我找不到任何东西 Python, 读取此类数据。

有谁知道以前现有的模块/用于阅读数据的脚本 SAS?

Edit

/从评论中添加到答案/: 数据是B. ascii / text, 数据字符串的开头如下:


3 10 1015000 150013200 00 002500 00 00
已邀请:

卫东

赞同来自:

从版本开始 17, Pandas 现在支持读取文件。 sas 延期 .xpt. 有关更多信息,请参阅
http://pandas.pydata.org/panda ... eader
关于文件 pandas.


df = pd.read_sas/'sas_xport.xpt'/

奔跑吧少年

赞同来自:

当您有能力下载数据集时 SAS, 您经常有能力下载数据集 Stata /它真的属于 PSID btw/. 在这种情况下,最简单的方法最有可能与
read_stata

/它可能会在未来发生变化,但我相信这是今天一个非常准确的陈述。/.

不太方便,但几乎总是可能的选择是加载文本文件 /通常提到 text, ascii 或者 csv/. 通常,它们是两种类型:分为 /逗号或标签/ 或除以空间 /柱子或tablic/. 如果文件由逗号或标签除以,请使用
read_csv

并安装适当的分隔符。 如果它由空格或表格分开 , 你可能很幸运
read_csv

, 或者你可能会更好
read_fwf

或者
read_table

. 略微取决于可变和格式类型。

从我读了什么
sas7bdat

, 提及 @hd1, 它似乎很好,但尚未参半 pandas. 因此,我倾向于使用默认值
read_stata

或者
read_csv

, 但我希望
sas7bdat

也很好地运作,可能被翻译成 pandas 在未来。 另外,我想知道速度是多少
sas7bdat

.
read_csv

很快很快了,而且
read_stata

- 最近的版本非常快 /以。。。开始 15.0, 我相信/. 我不确定速度
sas7bdat

?

二哥

赞同来自:

因此,我写了一个可以导入数据的包。 在这里能找到它:

https://pypi.python.org/pypi/psid_py
这是我的第一个包裹,很抱歉工作邋.. 此外,它仅对数据集进行了测试。 PSID, 而且我相信其他格式有误会 SAS. 但是,有些东西总比没有好。

除了阅读数据 sas, 如果您正在进行类似的事情,它还将为您创建面板数据。

奔跑吧少年

赞同来自:

数据位于固定表中 with. Fixed with 这意味着例如,第3个值从第15个字母开始的每一行开始,并继续到第114个字母。

1.Open 你的 SAS 或者 SPSS 输入操作员。 什么时候 SAS 你会找到这样的东西:


@ruslan ANO_CENSO 5. /*Ano do Censo*/
@詹大官人 PK_COD_ENTIDADE 9. /*Código da Escola*/
@知食 NO_ENTIDADE $Char100. /*Nome da Escola*/
@ruslan15 COD_ORGAO_REGIONAL_INEP $Char5. /*Código do Órgão Regional de Ensino*/


左边是一列 /在相应值的字母数量中/

2.In 下面的脚本,填充列,首先,这是列的名称,其次,元组是第一个和最后一个字母的第一个和列。/数字变量。 注意 SAS 开始计数S. 1, 和 python - 从 0.


import pandas as pd

columns=/
/'ANO', /0, 5//,
/'CODE', /5, 14//,
/'DESC_SITUACAO_FUNCIONAMENTO', /119, 134//,
/'FK_COD_ESTADO', /176, 178//,
/'SIGLA', /178, 181//,
/

df = pd.read_fwf/'TS_ESCOLA.TXT', names=zip/*columns/[0], colspecs=zip/*columns/[1], header=None/


// pd.read_fwf是一个固定读者 pandas.

涵秋

赞同来自:

看看代码 SAS, 你得到的。 您必须看到它是非常顺序格式化的,因此您可以拆除变量的名称和列以读取这些变量。 例如,在本文中
https://psidonline.isr.umich.e ... e.pdf
你可以看到操作员 INPUT 它有表单:


INPUT
ER30001 2 - 5
ER30002 6 - 8
ER30642 1528 - 1532
ER30643 1533 - 1534
...
;


所以只读该计划 SAS 并产生适当的 Python 使用相同的变量名称读取文本文件。

奔跑吧少年

赞同来自:

我知道这是一个旧的帖子,但只想提供一种有效的方法,如果有人通过这个页面 google.

我们可以用 pyreadstat, 做同样的事情 /您可以获得数据,以及元数据/.


import pyreadstat
df, meta = pyreadstat.read_sas7bdat/'/path/to/a/file.sas7bdat'/


或保存框架 pandas, 使用以下代码


pyreadstat.write_xport/df, "path/to/destination.xpt", file_label="test", column_labels=column_labels/

要回复问题请先登录注册