相反,通过一个临时文件解压的,我可以直接使用在Stata命名管道读取.csv.gz和.dta.gz文件作为说明在这里。我有两个问题,以防万一有人对它们使用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
保存和gzip解压缩.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
如果您可以按照Nick关于清除“不起作用”的建议来发布错误,那将很有帮助。
无论如何,您应该先尝试几件事
(1)根据您到Stata网站的链接创建一个bash脚本,而不是尝试一行执行
(2)确保文件名没有空格,或用双引号引起来$fname
(3)确保chmod 775 /path/to/myprog
使其可执行如果您运行* nix
(4)再次根据您的链接创建一个do文件
(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
成功。我正在使用Stata版本12运行Debian Linux Wheezy(实际上是#!,但还是一样)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句