如何将sas7bdat文件转换为csv?

11

我想将一个.sas7bdat文件转换成.csv/txt格式,以便可以将其上传到hive表中。我从外部服务器收到了这个.sas7bdat文件,但我的电脑上没有安装SAS。


你目前做了什么? - matsjoyce
如果您的计算机上没有安装 SAS,则从 sas7bdat 文件中检索数据非常困难。您能否以不同的格式获取数据,或将其传输到已安装 SAS 的计算机或服务器上? - mjsqu
这是不可能的,没有某种工具。SAS7BDAT是一种封闭格式,只有少数人进行了逆向工程。 - Joe
5个回答

10

使用R中的一个外部包来读取文件,并用该工具将其转换为CSV格式。

http://cran.r-project.org/doc/manuals/R-data.pdf 第12页

或者可以尝试使用SAS7BDAT包。它似乎忽略了自定义格式,读取了底层数据。

In SAS:

proc format;
value agegrp
   low - 12 = 'Pre Teen'
   13 -15 = 'Teen'
   16 - high = 'Driver';
run;

libname test 'Z:\Consulting\SAS Programs';

data test.class;
set sashelp.class;
age2=age;
format age2 agegrp.;
run;

在R语言中:

 install.packages(sas7bdat)
 library(sas7bdat)
 x<-read.sas7bdat("class.sas7bdat", debug=TRUE)
 x  

当使用这种方法时,导入的SAS数据集中的自定义格式化变量会发生什么?R只是看到底层值吗? - user667489
是的,修改了上面的答案以证明这一点。 - Reeza
6
https://github.com/hadley/haven 现在是 sas7bdat 包的一个更快的替代品。 - Saurfang

7
Python包sas7bdat,可以在这里找到,包含了一个用于读取sas7bdat文件的库:
from sas7bdat import SAS7BDAT
with SAS7BDAT('foo.sas7bdat') as f:
    for row in f:
        print row

这是一个命令行程序,无需编程就可以使用。

$ sas7bdat_to_csv in.sas7bdat out.csv

使用此方法将丢失dtype信息(元数据/标题,如类型、长度、标签等)。所有数字都显示为浮点数。 - Raj

4
我最近写了一个程序包,可以使用Hadoop/Spark将sas7bdat转换为csv。它能够拆分巨大的sas7bdat文件,从而实现高并行性。解析也使用了@Ashpreet建议的parso库。 https://github.com/saurfang/spark-sas7bdat

2
如果这只是一次性的需求,您可以从这里免费下载SAS系统查看器(需要注册账号,也是免费的):http://support.sas.com/downloads/package.htm?pid=176。然后使用该查看器打开SAS数据集并将其保存为CSV文件。据我所知,没有CLI界面,但如果您真的想要,可以编写一个Autohotkey脚本或类似的来将SAS数据集转换为CSV。此外,也可以使用SAS OLE DB提供程序读取SAS数据集而无需安装SAS,该提供程序可在此处获取:http://support.sas.com/downloads/browse.htm?fil=0&cat=64。但这相当复杂-如果您想了解更多信息,可以在此处获取一些文档:http://support.sas.com/documentation/cdl/en/oledbpr/59558/PDF/default/oledbpr.pdf

以下是如何使用PowerShell查看数据的描述,因此我认为可以使用相同的方法导出到CSV:http://blogs.sas.com/content/sasdummy/2012/04/12/build-your-own-sas-data-set-viewer-using-powershell/ - Stig Eide
谢谢,这帮助我测试数据,因为我最初无法查看SAS文件。 - Ashpreet Bedi

2
感谢您的帮助。我最终使用了Java中的Parso工具,它非常好用。该工具将行返回为对象数组,我将其写入了文本文件。
我从以下链接中参考了该工具:http://lifescience.opensource.epam.com/parso.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接