read.sas7bdat无法读取压缩文件

use*_*630 7 r sas

我正在尝试读取R中的.sas7bdat文件.当我使用该命令时

library(sas7bdat)
read.sas7bdat("filename")
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Error in read.sas7bdat("county2.sas7bdat") : file contains compressed data
Run Code Online (Sandbox Code Playgroud)

我没有SAS经验,所以任何帮助都将受到高度赞赏.

谢谢!

Joe*_*Joe 8

根据sas7bdat vignette [ vignette('sas7bdat')],截至2013年目前不支持COMPRESS=BINARY(或COMPRESS=YES)(当我写这篇文章时,这是2014年6月16日活跃的小插图). COMPRESS=CHAR得到支持.

这些基本上是内部压缩例程,旨在使文件大小.他们不是一样好gz或类似的(不是几乎一样好),但他们由SAS透明的,而写的SAS程序的支持.显然他们显着改变了文件格式,因此还缺乏实现.

如果您有SAS,则需要将这些写入未压缩的数据集.

options compress=no;
libname lib '//drive/path/to/files';
data lib.want;
set lib.have;
run;
Run Code Online (Sandbox Code Playgroud)

这是最简单的方法(很多),假设你有定义为LIBNAME lib如上和变化have,并want以是正确的(名字have应该是没有文件的扩展名的文件名,在大多数情况下,want是可以改变的,以什么逻辑与AZ或仅限下划线,不超过32个字符).

如果您没有SAS,则必须询问所提供的数据,以使数据以未压缩的形式提供,或以不同的格式提供.如果您是从网络上某处的PUDS获取此信息,则可以发布您从中获取信息的位置,并且可能有一种方法可以帮助您识别未压缩的来源.


Ras*_*sen 6

Haven 包可以读取压缩的 SAS 文件:

library(haven)
df <- read_sas("sasfile.sas7bdat")
Run Code Online (Sandbox Code Playgroud)

但仅限使用 压缩的 SAS 文件compress=char,而不是compress=binary.

所以 Haven 将能够读取这个 SAS 文件:

data output.compressed_data_char (compress=char);
set inputdata;
run;
Run Code Online (Sandbox Code Playgroud)

但不是这个 SAS 文件:

data output.compressed_data_binary (compress=binary);
set inputdata;
run;
Run Code Online (Sandbox Code Playgroud)

https://cran.r-project.org/package=haven

http://support.sas.com/documentation/cdl/en/lrcon/62955/HTML/default/viewer.htm#a001002773.htm


Mic*_*gge 5

公认这不是纯粹的R解决方案,但是在许多情况下(例如,如果您不在PC上并且没有能力自己编写SAS文件),其他发布的解决方案也不可行。

幸运的是,Python有一个模块(https://pypi.python.org/pypi/sas7bdat),该模块支持读取压缩的SAS数据集-如果您尚不具备SAS数据集,那么使用它肯定比需要获取SAS更好。提取文件并通过Python将其保存为文本后,即可在R中访问它。

from sas7bdat import SAS7BDAT
import pandas as pd

InFileName = "myfile.sas7bdat"
OutFileName = "myfile.txt"

with SAS7BDAT(InFileName) as f:
    df = f.to_data_frame()

df.to_csv(path_or_buf = OutFileName, sep = "\t", encoding = 'utf-8', index = False)
Run Code Online (Sandbox Code Playgroud)