Stata和命名管道

时间:2014-08-27 03:02:26

标签: stata named-pipes

我可以使用命名管道直接在Stata中读取.csv.gz和.dta.gz文件,而不是通过临时文件解压缩,如here所述。我有两个关于如何在Stata中使用命名管道的问题,以防有人了解它们。

  1. 帮助建议执行以下操作(编辑:这确实对我有用)

     #!/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
    
  2. 保存和压缩.dta文件时是否有类似的方法来使用命名管道?我试图复制上面的代码但没有成功。

1 个答案:

答案 0 :(得分:1)

编辑: 这是因为您没有重新创建bash文件和stata do文件中调用的代码。你刚刚完成了bash文件 您的代码应为:

!rm -f mypipe.pip && mknod mypipe.pip p && (zcat filename.gz > mypipe.pip &) >& /dev/null < /dev/null
infile a b c using mypipe.pip

如果你可以根据尼克关于清除什么“不起作用”的建议发布你所得到的错误,这意味着这将有所帮助。

无论如何,你应该先尝试一些事情

(1)根据您到Stata网站的链接创建一个bash脚本,而不是尝试在一行上执行 (2)确保您的文件名没有空格,或在$fname周围加上双引号 (3)如果你运行* nix
,请确保chmod 775 /path/to/myprog使其可执行 (4)再次按照你的链接制作文件 (5)在testfile.Z之后放一个符号,如下所示:!myprog testfile.Z #>& /dev/null < /dev/null infile a b c using mypipe.pip这允许输出转到标准输出,这样你就可以看到发生了什么。您可以在诊断出问题后将其删除 (6)将!myprog更改为!/path/to/myprog
(7)执行do mytest.do
(8)告诉我们Stata说的是错误是什么,如果有的话。

只要您在.csv之后指定所有变量名称,它就可以在我的机器上使用infile个文件,但是没有使用dta个文件。这是程序

首先按照推荐的方式制作名为myprog的bash文件

#!/bin/sh
    cd /path/to/dir
    fname=$1
    rm -r mypipe.pip
    mknod mypipe.pip p
    zcat $fname > /path/to/dir/mypipe.pip &

通过键入终端使脚本可执行: `chmod 775 / path / to / dir / myprog'

然后制作一个do文件。我有一个名为complete的数据集,我用它来测试主体

cd /path/to/dir

insheet using complete.csv
ds *
global vars "`r(varlist)'"

!7z a test.csv.gz complete.csv

!/path/to/dir/myprog test.csv.gz >& /dev/null < /dev/null
infile $vars using mypipe.pip, clear

成功。我正在运行Debian Linux Wheezy(实际上是#!但同样的交易),使用Stata版本12