【问题标题】:Importing a compressed dta file with SAS使用 SAS 导入压缩的 dta 文件
【发布时间】: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 压缩文件。命令是gusegsave。注意后面的“.gz”需要去掉,这有点烦人。好处是如果 myfile.dta 没有被压缩,guse 仍然会读入它。这允许我们的分析师用 guse/gsave 替换任何现有的usesave 命令。

// 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 进行任何压缩无关。

标签: linux sas stata


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多