【发布时间】:2014-08-27 03:02:25
【问题描述】:
我可以使用命名管道直接在 Stata 中读取 .csv.gz 和 .dta.gz 文件,而不是通过临时文件解压缩,如 here 所述。如果有人了解它们,我有两个关于如何在 Stata 中使用命名管道的问题。
-
帮助建议执行以下操作(编辑:这确实对我有用)
#!/bin/sh fname=$1 rm -f mypipe.pip mknod mypipe.pip p zcat $fname > mypipe.pip & !myprog testfile.Z >& /dev/null < /dev/null infile a b c using mypipe.pip我想了解为什么下面的代码不起作用。
!rm -f mypipe.pip && mknod mypipe.pip p && zcat filename.gz > mypipe.pip & infile a b c using mypipe.pip 在保存和压缩 .dta 文件时,是否有类似的方法来使用命名管道?我试图复制上面的代码但没有成功。
【问题讨论】:
-
在#2 Stata 可以自己压缩文件,所以我认为你根本不需要管道。参见例如blog.stata.com/tag/zip 在#1 上,您没有说“不起作用”是什么意思,但我疯狂地猜测,Stata 在尝试
infile之前不会等待外壳完成。您可以尝试将操作系统调用包装在另一个 Stata 程序中。然后 Stata 将(应该?)在尝试infile之前必须等待它完成。 -
我对 #1 的第二个想法是我的建议无济于事,因为它只会创建同一问题的另一个版本。但我没有做任何测试。
-
你好,尼克。谢谢。关于#2,据我了解,Stata 命令 zipfile 需要一个 .dta 文件并对其进行压缩。但是,我想直接压缩我正在使用的数据集——而不是先将它写在驱动器上。这减少了 I/O 负担。关于#2,mypipe.pip & 中的 & 号的目的是执行下一个命令而不等待命令完成,即我认为我们确实希望 Stata 在管道中解压缩所有内容之前开始读取。
-
好的;但是您的“不起作用”似乎仍然无法解释。我怀疑 Stata 会让你在不保存的情况下压缩任何东西。没有您可以命名的文件。
-
你好,尼克。我想做人们在 R 中可以做的事情:stackoverflow.com/questions/17492409/… 请注意,即使 stata 没有此特定命令,命名管道也可能允许这样做(Stata 将命名管道视为要使用的临时文件就足够了或保存)。毕竟,它似乎可以使用。
标签: stata named-pipes