コードにいくつかのエラーがあります:
- プログラムには、、、、 および
powersim3
オプションが必要ry1()
です。あなたへの電話では、これらのオプションを省略しました。ry2()
r12()
n()
simulate
- プログラムは、変数 y x1 x2 を削除することから始めなければなりません。そうしないと、2 回目以降に
generate
既に存在する変数を試行するときにエラーが返されます。
- この
syntax
ステートメントには、スペースが省略されているというさまざまな問題が含まれています。
すべてを修正すると、実際の例は次のようになります。
clear all
program define powersim3, rclass
syntax, ry1(real) ry2(real) r12(real) n(real) ///
[ my(real 0) m1(real 0) m2(real 0) m3(real 0) sy(real 1) ///
s1(real 1) s2(real 1) s3(real 1) alpha(real .05)]
drop _all
tempname m sd r
matrix `m' = (`my', `m1', `m2')
matrix `sd' = (`sy', `s1', `s2')
matrix `r' = (1, `ry1', `ry2'\ `ry1' , 1 , `r12'\ `ry2' , `r12', 1)
drawnorm y x1 x2, n(`n') corr(`r') means(`m') sds(`sd')
regress y x1 x2
end
simulate _b _se, reps(10000): ///
powersim3, ry1(.30) ry2(.30) r12(.30) n(282)
編集
このプロセス全体を 1 つのコマンドにパッケージ化するには、powersim3.ado と powersim3_simulator.ado の 2 つの .ado ファイルを保存する必要があります。前者はユーザーが呼び出すコマンドで、後者はsimulate
内で呼び出すコマンドですpowersim3
。現在メモリにあるすべてのデータを消去し、シミュレーションの結果に置き換えるためpowersim3
、ユーザーがオプションを指定することを主張しclear
ます。このセーフガードは、Stata の世界の慣習です。reps()
ユーザーがレプリケーション数を指定できるオプションを追加しました。残りのオプションは*
、 のsyntax
コマンドでキャプチャされますpowersim3
。これは、ユーザーが指定するその他のオプションがローカル マクロに保存されることを意味します`options'
。これらのオプションはすべてコマンドに渡されますpowersim3_simulator
。
*--- ファイル powersim3.ado を開始
program define powersim3
syntax , clear [ reps(integer 100) * ]
simulate _b _se, reps(`reps') : powersim3_simulator, `options'
end
*--- 最終ファイル powersim3.ado
*--- ファイル powersim3_simulator.ado を開始
program define powersim3_simulator
syntax, ry1(real) ry2(real) r12(real) n(real) ///
[ my(real 0) m1(real 0) m2(real 0) m3(real 0) sy(real 1) ///
s1(real 1) s2(real 1) s3(real 1) alpha(real .05)]
drop _all
tempname m sd r
matrix `m' = (`my', `m1', `m2')
matrix `sd' = (`sy', `s1', `s2')
matrix `r' = (1, `ry1', `ry2'\ `ry1' , 1 , `r12'\ `ry2' , `r12', 1)
drawnorm y x1 x2, n(`n') corr(`r') means(`m') sds(`sd')
regress y x1 x2
end
*--- 最終ファイル powersim3_simulator.ado
powersim3_simulator
は単なるヘルパー プログラムであり、多くの場合、同じ .ado ファイルにヘルパー プログラムを追加できます。
*--- foo.ado ファイルの開始
program define foo
...
bar
...
end
program define bar
...
end
*--- foo.ado ファイルの終了
これは、プログラムに必要なファイルの数を減らすので便利ですが、この場合は機能しません。その理由は、プログラムbar
(またはあなたの場合) がプログラム(またはあなたの場合)powersim3_simulator
に対してローカルになるためです。つまり、プログラムを見つけることができません。したがって、この問題を解決するには、2 つの .ado ファイルを保存する必要があります。foo
powersim3
simulate