本文介绍了在Stata.do文件中运行Perl脚本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
是否可以在Stata.do文件中执行Perl脚本?
我有一个Stata.do文件,我在其中对数据集进行了一些操作,并以某种方式排列它。然后,我有一个Perl脚本,在该脚本中,我在此时获取一个变量,对其应用Perl包,并对其中一个变量进行转换。特别是,我使用了Perl的NYSIIS函数,生成了一个非常短的脚本。在Perl中提供此输出之后,我想继续在Stata中进行一些其他工作。
脑海中浮现但不太可取的两个备选方案:
编写Stata代码来执行nysiis,但我更喜欢使用Perl的内置函数。
outsheet
并将Stata.do文件的输出保存为Perl的.txt文件。然后单独执行Perl脚本以获得另一个.txt。然后将该.txt文件读入Stata到一个新的.do文件并继续。
推荐答案
您的方法2是我用来调用其他程序来操作STATA数据的方法。正如尼克所说,Stata不一定会等待你的产出,除非你要求它这样做。首先outsheet
文本文件,然后使用!
从Stata调用Perl脚本以在命令行上运行一些内容。最后,使用while
循环和sleep
命令让Stata定期检查结果文件,这样Stata就不会经常检查。
outsheet using "perl_input.txt"
!perl my_perl_script.pl
while (1) {
capture insheet using "perl_output.txt", clear
if _rc == 0 continue, break
sleep 10000
}
!rm perl_output.txt
这里,您的格式化数据从Stata保存为perl_input.txt
。接下来,从命令行运行Perl脚本,并使用while
循环,Stata每10秒检查一次输出(sleep
以毫秒为单位获取参数)。当它找到输出文件时,它会中断while
循环。最后一行是个好主意,这样当您重用代码时,就不会冒着使用上次运行的Perl输出的风险。 这篇关于在Stata.do文件中运行Perl脚本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!