在Stata .do文件中运行Perl脚本

时间:2013-06-06 13:59:55

标签: perl stata

是否可以在Stata .do文件中执行Perl脚本?

我有一个Stata .do文件,我在其中对数据集进行一些操作并以某种方式对其进行排列。然后我有一个Perl脚本,其中我在此处获取其中一个变量,对其应用Perl包,并对其中一个变量进行转换。特别是,我使用Perl的NYSIIS函数,导致脚本非常短。在Perl中提供此输出后,我想继续在Stata中进行一些额外的工作。

我想到的两种不太可取的选择是:

  1. 编写Stata代码来执行nysiis但我更喜欢使用Perl的内置函数。

  2. outsheet并将Stata .do文件的输出保存为Perl的.txt。然后单独执行Perl脚本以获取另一个.txt。然后读入.txt到Stata到一个新的.do文件并恢复。

2 个答案:

答案 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听起来最简单。