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

Linux 使用SAS导入压缩的dta文件,linux,sas,stata,Linux,Sas,Stata,我当前正在将创建的.dta文件导入SAS中,其中包含以下内容: proc import datafile='myfile.dta' out=test dbms=dta replace; run; 为了在备份文件时节省空间和带宽,我只希望保留dta文件的压缩版本。我可以用SAS“即时”读取压缩的dta文件吗 我试过: filename foo pipe 'gunzip -c myfile.dta.gz'; proc import datafile=foo out=test dbms=dta

我当前正在将创建的.dta文件导入SAS中,其中包含以下内容:

proc import datafile='myfile.dta' out=test dbms=dta replace;
run;
为了在备份文件时节省空间和带宽,我只希望保留dta文件的压缩版本。我可以用SAS“即时”读取压缩的dta文件吗

我试过:

filename foo pipe 'gunzip -c myfile.dta.gz';

proc import datafile=foo  out=test dbms=dta replace;
run;
但是SAS说
错误:不允许随机访问。

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

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

更新

@Joe很好地解释了为什么proc import不能与
.dta
文件的管道一起工作,并建议进行“临时解压缩”

SAS

我计划把它放在一个宏中,这样用户就可以通过一个简单的宏调用导入
dta.gz

* 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

我找到了两个用于使用和保存gzip文件的Stata模块。这些命令是
guse
gsave
。注意尾部的“.gz”需要去掉,这有点烦人。好的一面是,如果myfile.dta没有被压缩,那么
guse
仍将读取它。这使得我们的分析师可以用guse/gsave替换任何现有的
use
save
命令

// import
guse "/home/banjer/data/myfile.dta"  

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

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

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


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

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

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


IMO,最简单的选择是压缩到一个临时位置,阅读它,然后删除临时文件。

这与R无关……我不清楚他是否打算为R问同样的问题,或者对R有不同的解决方案(阅读最后一段)。谢谢,我还不应该包括
r
标签。稍后我可能会问同样的问题,所以我不想一次问太多问题。好奇。您可以使用Stata中的
COMPRESS
选项吗?这是否足够有用,SAS是否可以读取?Stata中的
compress
命令[NB]可能会压缩一个数据集以生成另一个数据集。一旦
save
d,这样的数据集与任何其他数据集一样可读。相同的文件格式用于.dta文件compress与使用任何类型的zip进行任何压缩无关。这与R无关……我不清楚他是否打算对R问同样的问题,或者对R有不同的解决方案(阅读最后一段全文)。谢谢,我不应该包括
R
标签。稍后我可能会问同样的问题,所以我不想一次问太多问题。好奇。您可以使用Stata中的
COMPRESS
选项吗?这是否足够有用,SAS是否可以读取?Stata中的
compress
命令[NB]可能会压缩一个数据集以生成另一个数据集。一旦
save
d,这样的数据集与任何其他数据集一样可读。相同的文件格式用于.dta文件compress与使用任何类型的zip进行压缩无关。