2

是否可以在 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 文件并继续。

4

2 回答 2

4

您的方法 2 是我用来调用其他程序对 Stata 数据进行操作的方法。正如尼克所说,除非您要求,否则 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 输出的风险。

于 2013-06-07T04:10:28.307 回答
0

我认为主要问题是尽管您可以使用 shell 调用其他内容,但 Stata 不会等待结果。

help shell看看什么是可能的,但你的#2 听起来最简单。

于 2013-06-06T17:24:55.323 回答