在Stata.do文件中运行Perl脚本 [英] Running a Perl script within a Stata .do file

查看:13
本文介绍了在Stata.do文件中运行Perl脚本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否可以在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是我用来调用其他程序来操作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脚本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆