是否可以在Stata .do文件中执行Perl脚本?
我有一个Stata .do文件,我在其中对数据集进行一些操作并以某种方式对其进行排列。然后我有一个Perl脚本,其中我在此处获取其中一个变量,对其应用Perl包,并对其中一个变量进行转换。特别是,我使用Perl的NYSIIS函数,导致脚本非常短。在Perl中提供此输出后,我想继续在Stata中进行一些额外的工作。
我想到的两种不太可取的选择是:
编写Stata代码来执行nysiis但我更喜欢使用Perl的内置函数。
outsheet
并将Stata .do文件的输出保存为Perl的.txt。然后单独执行Perl脚本以获取另一个.txt。然后读入.txt到Stata到一个新的.do文件并恢复。
答案 0 :(得分:4)
您使用的方法2是我用来调用其他程序来操作Stata数据的方法。正如Nick所说,Stata不一定会等你的输出,除非你问它。首先outsheet
文本文件,然后使用!
从Stata调用Perl脚本在命令行上运行。最后,让Stata定期检查结果文件,使用while
循环和sleep
命令,这样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输出的风险。
答案 1 :(得分:0)
我认为主要的问题是虽然你可以使用shell来调用别的东西,但是Stata不会等待结果。
从help shell
开始,看看有什么可能,但你的#2听起来最简单。