gpt4 book ai didi

linux - 使用 SAS 导入压缩的 dta 文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:59:51 25 4
gpt4 key购买 nike

我目前正在导入 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 replace;
run;

但是 SAS 说 ERROR: Random access not allowed.

我也试过 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 模块 here用于使用和保存 gzip 文件。命令是 gusegsave。请注意,尾随的“.gz”需要去掉,这有点烦人。好的一面是,如果 myfile.dta 没有被压缩,那么 guse 仍然会读入它。这允许我们的分析师替换任何现有的 usesave 带有 guse/gsave 的命令。

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

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

最佳答案

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

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

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

关于linux - 使用 SAS 导入压缩的 dta 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16922441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com