Stata和命名管道

Stata和命名管道,stata,named-pipes,Stata,Named Pipes,如前所述,我可以使用命名管道直接在Stata中读取.csv.gz和.dta.gz文件,而不是通过临时文件进行解压缩。关于如何在Stata中使用命名管道,以防有人了解它们,我有两个问题 “帮助”建议执行以下操作(编辑:这确实对我有效) 在保存和压缩.dta文件时,是否有类似的方法使用命名管道?我试图复制上面的代码,但没有成功 编辑: 这是因为您没有重新创建bash文件+stata do文件中调用的代码。您刚刚完成了bash文件。 您的代码应为: !rm -f mypipe.pip &&a

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

  • “帮助”建议执行以下操作(编辑:这确实对我有效)

  • 在保存和压缩.dta文件时,是否有类似的方法使用命名管道?我试图复制上面的代码,但没有成功

  • 编辑: 这是因为您没有重新创建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
    
    通过在终端中键入以下命令使脚本可执行: `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
    
    cd/path/to/dir
    使用complete.csv插入图纸
    ds*
    全局变量“`r(varlist)”
    !7z a test.csv.gz complete.csv
    !/path/to/dir/myprog test.csv.gz>&/dev/null

    成功。我正在运行DebianLinuxWheezy(事实上是这样的,但也一样),在2上使用StataVersion12,Stata可以自己压缩文件,所以我看你根本不需要管道。例如,见第1页,你没有说“不起作用”是什么意思,但我疯狂地猜测,Stata在尝试
    填充
    之前不会等待外壳完成。您可以尝试将OS调用包装到另一个Stata程序中。然后,斯塔塔(应该?)不得不等待这一过程完成,然后再尝试
    infle
    。我对#1的第二个想法是,我的建议没有帮助,因为它只会造成同一问题的另一个版本。但是我没有做任何测试。你好,尼克。谢谢关于#2,据我所知,Stata命令zipfile获取一个.dta文件并压缩它。但是,我希望直接压缩正在使用的数据集,而不必先将其写入驱动器。这减少了I/O负担。关于#2,mypipe.pip中的amperand的目的正是执行下一个命令,而不必等待命令完成,即我想我们正是希望Stata在管道中的所有内容解压之前开始阅读;但你的“不工作”似乎仍然无法解释。我怀疑斯塔塔会让你不保存任何东西;没有可以命名的文件。你好,尼克。我想做的正是人们在R中可以做的事情:注意,即使stata没有这个特定的命令,命名管道也可以做到这一点(stata将命名管道视为要使用或保存的临时文件就足够了)。毕竟,它似乎是可以使用的。当你说它在你的机器上使用.csv文件时,你的意思是,你把数据放在一个.csv文件中,然后压缩它,然后作为你的
    testfile.Z
    ?您能否展示您的确切程序(数据输入、代码、文件分发等)和设置细节(Stata版本、操作系统、终端等)?原始海报也应该这样做。我尝试了几次命名管道的问题,直到现在都没有成功。调用
    zcat
    后,Stata似乎冻结了。bash进程在后台打开,但没有其他操作。我必须点击Stata Break按钮并手动结束bash进程(在系统管理器中)以解冻它。我试过Mint Debian和Stata 12.1。我的意思和你在第一条评论中说的完全一样。我会修改我上面的帖子,包括我的精确测试。嘿,对不起,我不清楚。如stata帮助中所示,我在打开.csv.gz或.dta.gz时没有问题。我只是很难理解为什么最简单的语法(在#1中)不起作用。现在,#2是关于我无法在管道中保存.dta和.csv文件的事实,即使代码与帮助中给出的代码类似。实际上,您的单行命令对我不起作用。不过没关系。您知道为什么需要&/dev/null!rm -f mypipe.pip && mknod mypipe.pip p && (zcat filename.gz > mypipe.pip &) >& /dev/null < /dev/null infile a b c using mypipe.pip
    #!/bin/sh
        cd /path/to/dir
        fname=$1
        rm -r mypipe.pip
        mknod mypipe.pip p
        zcat $fname > /path/to/dir/mypipe.pip &
    
    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