HOME >計量分析ソフトSTATAを使い倒す
SiteMap

HOME

Macbook Pro Retina13 を使い倒す

ipad miniを使い倒す

ペンタブレット CTH-470を使い倒す

ASUS U31F-RX480

ICONIA W500を使い倒す

iPadでペーパーレス生活

Acer AS1410を使いこなす

Macbook Airを使い倒す

LOOX P70Tを使い倒す

LOOX U C30も使い倒す

タブレットPC用フリーウェア

ペーパーレスにする

VBAを使い倒す(EXCEL編)

S12HTを使い倒す

STATAを使い倒す

MOSpeech

MOSpeech Chat

MOSpeech プレゼンテーション

書きま表

読みま表

ショートカット・小技







計量分析ソフトSTATAを使い倒す
・サンプルの使い方   ・変数の一部を変更   ・変数の一部を変更 その2   ・ExcelでSTATA   

   サンプルの使い方

各サンプルdoファイルは、データファイル(.dta)がcドライブ直下(C:\)にあると想定しています。

それ以外のフォルダにデータを置く場合には、doファイルの「cd "C:\"」を修正してください。

サンプルデータは何の根拠もないでたらめなデータです。





   変数の一部のみを次々に変えながら複数の式の推計をする
サンプルファイル⇒
v_henkou.do : v_henkou.dta


一つの変数のみを変えながら複数の式の推計するのであれば、「foreach 〜 of varlist ・・・ 」が使えますが,複数の変数の場合はそれが使えません(多分)。

その場合には、変数群をlocal変数として定義して、forvaluesと組み合わせることで推計を行います。

以下の例では、被説明変数「wage」を説明変数の「educ male tenure」と「その他の変数」で回帰するが、「その他の変数」については「age」「exper」「age age2」「exper exper2」の4パターンがあるケースです。


/**************************************************************/
cd "C:\"
use "v_henkou.DTA", clear

local dvar_a="educ male tenure"
local dvar_b1="exper"
local dvar_b2="age"
local dvar_b3="exper exper2"
local dvar_b4="age age2"



forvalues i=1(1)4 {
reg wage `dvar_a' `dvar_b`i''
}

/**************************************************************/

上のプログラムの下から2行目の「`dvar_b`i''」のところに注意してください。変数カウンター`i'(=1,2,3,4)を使っているのですが、`dvar_b1'`dvar_b2'`dvar_b3'`dvar_b4'自体もlocal変数ですので2重の「`'」でくくっています。エスケープ文字は必要ありません。





   変数の一部のみを次々に変えながら複数の式の推計をする その(2)
サンプルファイル⇒
v_henkou2.do : v_henkou2.dta


次は、上の例の応用編です。今度は被説明変数も同時に次々に変えていきます。

被説明変数変数は wage lwage earn の3パターン

説明変数は、(educ male tenure exper) (educ male tenure age)(educ male tenure exper exper2)(educ male tenure age age2)の4パターン。

3×4で合計12本の式を推計します。これを12本すべて普通に書くと大変長いdoファイルになってしまします。


/**************************************************************/

cd "C:\"
use "v_henkou2.DTA", clear


local wg1="wage"
local wg2="lwage"
local wg3="earn"

local dvar_a="educ male tenure"
local dvar_b1="exper"
local dvar_b2="age"
local dvar_b3="exper exper2"
local dvar_b4="age age2"


forvalues j=1(1)3 {
   forvalues i=1(1)4 {
   reg `wg`j'' `dvar_a' `dvar_b`i''
   }
}

/*****************************************************************/

こんどは変数カウンターに`j'と`i'の2つを使って2重にforvaluesを使っています。

実際に推計に関連する部分はたったの5行です。とてもすっきりとしたdoファイルになります。




   Excelにdoファイルを記述してSTATAを実行する
サンプルファイル⇒
VBA_STATA.xls


これはSTATAの技というよりは、VBAの技ですが・・・。

計量分析に用いるデータの定義が複雑なときに、Excelの関数を利用してdoファイルを書く場合があります。

例えば,所得水準が1なら0〜99万円、2なら100〜299万円・・・というように階級のカテゴリーでデータが定義されていて、分析には階級値を使いたいというケースがよくあります。

こんなときは、excelのシートの1列目に階級のカテゴリー,2列目に階級の下限値,3列目に階級の上限値を書いて,4列目の1行目に「= "replace earn=" & (B1+C1)/2 & " if earn_rank=="& A1」と書けばあとはドラッグすればreplaceの記述ができます。これをdoファイルにコピーして貼りつければ良いわけです。


このようにSTATAのdoファイル作成とexcelの相性は良いのですが,ここでは更に1歩進んでVBAを使って,excelのシートに記述したdoファイルをボタンひとつで実行までしてしまう方法をご紹介します。


VBAでシート内の記述をもとにdoファイルを作成したあとに,そのdoファイルをstataから起動するbatファイルを作成して,VBAからはShellでそのbatファイルを起動するという2構え戦法です。もっとエレガントな方法があるかもしれませんが・・・。


上のサンプルファイルを使ってみてください。シートの一列目一行目にSTATAのプログラムファイルのパスを記述するようにしてください。サンプルの「C:\Stata8\wsestata.exe」は私のSTATAの場合ですので,お使いのパソコンにあわせて変更してください。


また,doファイルの記述の終わりには「end」と入れてください。これがなくても一応動きますが,1万行目まで読んでしまうので遅くなります。


以下に,サンプルファイルの実行ボタンに割り当てたVBAコードを書いております。


/********************************************************************/

Private Sub runSTATA_Click()

Dim doStr As String
Dim batStr As String

Dim doFilePath As String
Dim batFilePath As String

With Worksheets("runSTATA")

doStr = ""
for i = 5 to 10000
If .Cells(i, 1) = "end" Then Exit for
doStr =doStr & .Cells(i, 1) & Chr(13) + Chr(10)
Next i

doFilePath = ThisWorkbook.Path & "\VBA_STATA.do"

Dim Fso, myFile
Set Fso = CreateObject("Scripting.FileSystemObject")
Set myFile = Fso.createTextFile(doFilePath, True)

myFile.Write doStr
myFile.Close

    
batStr = .Cells(1, 1) & " do " & doFilePath & Chr(13) + Chr(10)
batFilePath = ThisWorkbook.Path & "\VBA_STATA.bat"

Set Fso = CreateObject("Scripting.FileSystemObject")
Set myFile = Fso.createTextFile(batFilePath, True)

myFile.Write batStr
myFile.Close

Dim WSHShell As Object

Set WSHShell = CreateObject("WScript.Shell")
WSHShell.Run batFilePath, , True

End With

End Sub

/********************************************************************/


STATAのプログラミングコマンドはまあまあ良くできているとは思いますが,本物のプログラミング開発環境には及ばない面が多々あります。

たとえば「指定したフォルダにあるすべての.dtaファイルに対してこれこれの操作を実行する」ということがしたい場合,STATAのコマンドではなすすべがありません(ファイル名のリストを配列ではなく文字列で取得はできますが・・・)。

このような場合,EXCELのVBAでDir関数を使ってdoファイルの記述をダイナミックに作成してやればうまくできるわけです。

ほかにもいろいろな用途があるかと思います。