2

Stata .do ファイル内で Perl スクリプトを実行することは可能ですか?

私は Stata .do ファイルを持っています。このファイルでは、データ セットを操作し、特定の方法で配置しています。次に、この時点で変数の 1 つを取得し、それに Perl パッケージを適用して、変数の 1 つに変換する Perl スクリプトを作成します。特に、Perl の NYSIIS 関数を使用して、非常に短いスクリプトを作成しました。この出力が Perl で提供された後、Stata でいくつかの追加作業を続けたいと思います。

頭に浮かぶが、あまり望ましくない2つの選択肢は次のとおりです。

  1. nysiis を実行する Stata コードを作成しますが、私は Perl の組み込み関数を使用することを好みます。

  2. outsheetStata .do ファイルからの出力を Perl の .txt として保存します。次に、Perl スクリプトを個別に実行して、別の .txt を取得します。次に、その .txt を Stata から新しい .do ファイルに読み込み、再開します。

4

2 に答える 2

4

あなたのアプローチ番号2は、私が他のプログラムを呼び出してStataデータを操作するために使用するものです。Nick が言うように、Stata は、あなたが要求しない限り、必ずしもあなたの出力を待つわけではありません。最初にテキスト ファイルを取得し、次にコマンド ラインで何かを実行するためにoutsheet使用して、Stata から Perl スクリプトを呼び出します。最後に、ループとコマンド!を使用して、Stata に結果ファイルを定期的にチェックさせて、Stata が常にチェックしないようにします。whilesleep

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 に答える