首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SAS导入压缩的dta文件

使用SAS导入压缩的dta文件
EN

Stack Overflow用户
提问于 2013-06-04 16:01:32
回答 1查看 1.9K关注 0票数 0

我目前正在将斯塔塔-created .dta文件导入SAS,其中包含以下内容:

代码语言:javascript
复制
proc import datafile='myfile.dta' out=test dbms=dta replace;
run;

为了节省备份文件时的空间和带宽,我只想保留压缩版本的dta文件。我能用SAS读取一个压缩的dta文件吗?

我试过:

代码语言:javascript
复制
filename foo pipe 'gunzip -c myfile.dta.gz';

proc import datafile=foo  out=test dbms=dta replace;
run;

但是SAS说ERROR: Random access not allowed.

我也尝试过proc cimport,但这似乎不支持.dta文件。我确信我可以使用x命令解压缩,然后删除程序的底部,但我希望有一个更干净的解决方案,因为我将要求大约50个其他SAS/Stata/R程序员来实现这个功能。

我们正在64位Linux上运行SAS 9.2 ts2m3 .

更新

@Joe提供了一些关于proc导入为什么不能用于.dta文件的管道的很好的见解,并建议进行“临时解压缩”。

SAS

我计划将其放入宏中,这样用户就可以通过简单的宏调用导入dta.gz

代码语言:javascript
复制
* import file ;
x gunzip -c /home/banjer/data/myfile.dta.gz > /home/banjer/data/myfile.dta ;

proc import datafile="/home/banjer/data/myfile.dta" out=mydata dbms=dta replace;
run;

* delete temp uncompressed file ;
x rm /home/banjer/data/myfile.dta ;


* save file ;
proc export data=mydata dbms=dta
  file="/home/banjer/data/jtest.dta"
  dbms=dta replace;
run;

x gzip /home/banjer/data/jtest.dta ;

Stata

我找到了两个Stata模块这里,用于使用和保存gzipped文件。命令是gusegsave。请注意,尾随的".gz“需要停止,这有点烦人。好的一面是,如果myfile.dta没有被压缩,那么guse仍然会读取它。这使我们的分析人员可以用guse/gsave替换现有的任何usesave命令。

代码语言:javascript
复制
// import
guse "/home/banjer/data/myfile.dta"  

// save
gsave "/home/banjer/data/myfile.dta"  
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-04 16:12:19

我不相信有办法直接做到这一点。如果您有一个文本文件,您可以通过尝试使用的方法轻松地完成您想要做的事情。但是,除了DBMS=CSV或TAB之外,PROC导入使用的是随机访问(即在文件中返回和转发,而不是顺序读取),因此不能有效地处理字节流。

您可以编写自己的Stata解释器,但听起来似乎超出了项目的范围。(Stata文件并不难读,所以您可能可以像处理字节流一样处理它,但这仍然可能需要几周的工作。)如果您确实想尝试这样做,我可以向您指出进行此操作所需的文档。

最简单的选择,IMO,是把枪拉链到一个临时的位置,读取它,然后删除临时文件。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16922441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档