【发布时间】:2013-06-04 16:01:32
【问题描述】:
我目前正在将Stata-created .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。
更新
@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 考虑了不同的解决方案(阅读最后一段完整的段落)。
-
谢谢,我不应该包含
r标签。以后我可能会问同样的问题:R,所以我不想一个人问太多问题。 -
很好奇。您可以在 Stata 中使用
COMPRESS选项吗?这是否有足够的帮助,SAS 是否可以读取它? -
Stata 中的
compress命令 [NB] 可以压缩数据集以生成另一个数据集。一旦saved,这样的数据集就和任何其他数据集一样可读。 .dta 文件使用相同的文件格式。 Stata 中的compress与使用任何类型的 zip 进行任何压缩无关。