R -读.Sas7bdat无法读取压缩文件



我试图在r中读取。sas7bdat文件。当我使用命令

library(sas7bdat)
read.sas7bdat("filename")

我得到以下错误:

Error in read.sas7bdat("county2.sas7bdat") : file contains compressed data

我没有SAS的经验,所以任何帮助都将是非常感谢的。

谢谢!

根据sas7bdat插图[vignette('sas7bdat')], COMPRESS=BINARY(或COMPRESS=YES)目前不支持2013年(当我写这篇文章时,这是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;

这是最简单的方法(许多),假设您有一个libname定义为lib如上所述,并将havewant更改为正确的名称(have应该是文件名,在大多数情况下没有文件扩展名;want可以更改为任何具有A-Z或下划线的逻辑,并且32个或更少的字符)。

如果没有SAS,则必须要求所提供的数据提供未压缩或其他格式的数据。如果你是从网上某个地方的PUDS获得的,你可能会发布你从哪里获得它,并且可能有一种方法可以帮助你识别未压缩的源代码。

无可否认,这不是一个纯粹的R解决方案,但在许多情况下(例如,如果你不是在pc上,没有能力自己写SAS文件),其他的解决方案是不可行的。

幸运的是,Python有一个支持读取压缩SAS数据集的模块(https://pypi.python.org/pypi/sas7bdat)——如果你还没有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)

haven包可以读取压缩的sas文件:

library(haven)
df <- read_sas("sasfile.sas7bdat")

但是只有使用compress=char而不是compress=binary压缩的sas文件。

所以haven将能够读取这个sas文件:

data output.compressed_data_char (compress=char);
set inputdata;
run;

但不是这个sas文件:

data output.compressed_data_binary (compress=binary);
set inputdata;
run;
https://cran.r-project.org/package=haven

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

"RevoScaleR"是读取SAS数据集(压缩或未压缩)的好包。您可以使用该包的rxImport功能。下面是示例

<标题>导入库h1> 读取数据
R_df_name <- rxImport("fake_path/file_name.sas7bdat")

此函数的速度远远优于haven/sas7bdat/sas7bdat.parso。我希望这能帮助到那些在r中读取SAS数据集的人。

干杯!

对于这种挑战,我发现R是最简单的,特别是对于压缩的sas7bat文件,简单的三行:

library(haven)
data <- read_sas("yourfile.sas7dbat")

,然后转换为CSV

write.csv(data,"data.csv")

最新更新