tb006  一時データのスカラー変数への保存



Stataによって算出されたスカラー値を一時的にどこかに保存しておきたいといったことはしばしば起ります。そのような場合にscalarコマンドを利用するとメモリ的に効率の良い保存操作が行えます。scalarコマンドについてはマニュアルエントリ [P] scalar をご参照ください。

今、summarizeコマンドを用いて2つの平均値m1, m2を算出し、その差dを算出したいものとします。もちろんこの計算過程に人間が介在するのであれば、m1, m2の値をメモに控えるなどの方策により何とでもできるわけですが、doファイルやプログラムの中で一連の処理を記述するとなると、計算結果の一時保存といった操作が避けて通れません。

ここではExampleデータセットauto.dtaを用いてscalarコマンドの用例を紹介します。

. sysuse auto.dta

このデータセット中には1978年に米国で販売された74車種のデータが記録されています。変数mpgはガソリン1ガロン当りの走行性能(miles per gallon)を示す指標ですが、最初に外国車の場合の平均値m1を算出してみます。

. summarize mpg if foreign == 1

summarizeコマンドからの出力情報はreturn listコマンドによって確認することができます。

. return list

平均値であればr(mean)という名称でアクセスすることができるわけです。しかしこのr()中の情報は一過性のものであり、次にsummarizeコマンドを実行するとその内容が変化してしまいます。そこでr(mean)の値を退避することを考えます。誰でも思いつくのはgenerateコマンドを用いる方法でしょう。

. generate mpg1 = r(mean)

しかしgenerateコマンドによって生成されるのはベクトルであるという点に注意してください。

. list mpg1 if _n <= 5 | _n >= (_N - 4)

ここでの例の場合には24.77273という値が74個も生成されてしまっています。単なるスカラー値をベクトルとして記憶するのはメモリ効率という面でむだの多い方法です。scalarコマンドを使えばこのようなむだは生じません。

. scalar m1 = r(mean)

この状態で米国車のmpgの平均値m2を求め、続けてd=m1m2の値を計算します。

. summarize mpg if foreign == 0

. display m1 - r(mean) *1
4.9458042

*1 メニュー操作の場合には Data > Other utilities > Hand calculatorと操作します。
   


小技コーナー ページへ戻る

 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

© 2018 Math工房