我目前进口Stata -created .dta文件到SAS下列要求:导入压缩文件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说ERROR: Random access not allowed.
我也试过proc cimport
,但这似乎并不支持.dta文件。我确信我可以使用x
命令在程序底部解压缩然后删除,但希望有一个更清晰的解决方案,因为我会询问另外50个SAS/Stata/R程序员来实现它。
我们在64位Linux上运行SAS 9.2 ts2m3。
UPDATE
@Joe提供为什么PROC进口不带管工作的.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的模块here使用和保存gzip压缩文件。命令是guse
和gsave
。请注意,尾随的“.gz”需要保留,这有点烦人。好的一面是,如果myfile.dta没有被压缩,那么guse
仍然会读入。这使我们的分析师可以用guse/gsave替换任何现有的use
和save
命令。
// import
guse "/home/banjer/data/myfile.dta"
// save
gsave "/home/banjer/data/myfile.dta"
这与R没有任何关系...... –
我不清楚他是否打算针对R提出同样的问题,或者是否有针对R的不同解决方案(请阅读最后一个完整段落) 。 – Joe
谢谢,我不应该包含那个'r'标签。我可能会在后面问同样的问题:所以我不想在一个问中问太多问题。 – Banjer