07月≪ 2017年08月 ≫09月

12345678910111213141516171819202122232425262728293031
2017.02/09(Thu)

STATASTANで大苦戦

STATAには組み込みのベイズプログラムがあるが、STATASTANというインターフェースを
利用してはやりのベイズMCMCプログラムSTANが使える。

STANはG++でプログラムをコンパイルして動くので高速ということなのだが、これがいくら
やってもエラーでうまく動かない。ここ2~3日苦しんでいてようやく原因が判明。

エラーを追いかけて、存在しないとか言われたファイルを見てみると、拡張子が
hppとなるところが0000644となっていたり、ファイル名の最後が00644とか、
拡張子が消えていたりというファイルがごっそりでてきた。

なぜ、0000644という数字になるのかよくわからないが、どうも元々のファイルが
壊れていると言うよりも、ファイルを解凍する際に壊れてしまったらしい。

こんなことは初めてで原因をつかむのに苦労した。現在、再解凍したりチェックの最中。
スポンサーサイト
18:00  |  STATA  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑
2017.02/07(Tue)

RStudioとSTATA

RStudioを触っていたらSPSSやEXCELからデータをインポートできるだけではなく、
STATAからもメニューから直にインポートできることに気がついた。

ただ、パスに日本語があるとエラーになるのでデータの置き場所だけは変更して
おく必要がある。
15:24  |  STATA  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑
2016.12/06(Tue)

STATA: 度数分布表で度数の降順でソートして表示

度数の出力で降順に並べたい場合は一元配置表の「度数に関して降順で表示する」に
チェックを入れれば良い。

コマンドでは「sort」をカンマで区切って付け加える。

. tabulate 変数1 ,sort
18:22  |  STATA  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑
2016.12/06(Tue)

STATA:結果出力が長くて見られない

STATAで長い結果出力をだして、スクロールして前の方を見ようとしたら、あるところまでで
それ以上スクロールできない。

結論からいえば、仕様のようだ。

長い出力はログファイルとして保存しておけということらしい。

やり方はメニューの「ファイル」から「ログ」「開始」としてファイル名を指定するだけ。
他愛のない話だが、他のソフトから移ってくるとこんなところでも戸惑う。
18:17  |  STATA  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑
2016.12/06(Tue)

STATA:クロス表で%を出力

STATAでクロス表を作成するには度数分布表で二元配置の表とすればよい。

ところでSPSSならクロス集計表で行、列、全体についてパーセントのチェックを
いれることができ、度数や期待度数に加えて%を出せた。

ところがSTATAにはパーセントという表記が見当たらない。ネットで調べて
tabulate 変数1 変数2, cell row cplumn
のように ,cell 」に続けて行ならrow、列ならcolumnをつければよいことを知る。

しかし、コマンドではなくメニューでできないのはどうかと思っていたらできた。

度数分布表で二元配置の表、その中にある「列内の相対度数」「行内の相対度数」に
チェックを入れればよい。

相対度数という訳語?がどうかとも思うのだが、パーセントとした方がわかりやすいはず。
18:11  |  STATA  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑
2016.11/28(Mon)

SPSSからSTATA: SELECT IF

SPSSからSTATAに移行して、戸惑うのは「SELECT IF」だろう。

ある条件のデータに絞って分析するのはよくあるので、STATAにもSPSSの「SELECT IF」文に
相当するコマンドがあると思って探してもみつからない。

結局、以下のHPをみつけた。

http://www.ats.ucla.edu/stat/stata/faq/spss_command_to_stata.htm

結論から言えば、「SELECT IF」はない。かわりに「keep」か「drop」
を使う。「keep」なら残す・保持するで「drop」なら除くというわけ。

keep if (VAR == 3)

とすれば、VARの値が3のデータだけを分析できる。
17:16  |  STATA  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑
2016.09/10(Sat)

STATAで日付を抽出

日付変数から年だけを抽出する必要に迫られた。これがとても簡単。
year( )で日付変数をくくればよい。

gen 西暦 = year(日付変数)

月や日も以下の通り。

gen 月 = month(日付変数)

gen 日 = day(日付変数)

23:29  |  STATA  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑
2016.09/10(Sat)

STATA の more を抑制

STATAの出力はテキストで、ページ区切りのように more でいったん止まる。

これを一気に出力させるには
set more off
と打ち込んで実行すれば良いというのは調べるとすぐわかる。ちなみにこれは大文字小文字を区別するようだ。

ただ、毎回、これを打ち込むのは面倒。いろいろ探したがメニューから制御するコマンドを
見つけられない。なぜ入れておかないのだろう。

結局、以下で解決。
set more off, permanently
23:24  |  STATA  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑
2016.08/14(Sun)

SPSSからSTATAへの欠損値変換

さて、SPSSのデータファイルをSPSSからSTATA8の形式で保存。

次にSTATAから文字コードを変換して(しないと文字化けしたデータファイルのまま)、
これで値ラベルは日本語にできる。日本語の変数名はVのついた変数名になっているので
rename V2 質問1
のように変換(Excelを利用して一気にコマンドラインから変換)。

これでほぼSPSSファイルがSTATAファイルに日本語化される。

しかし、問題がまだある。それは欠損値。STATAの欠損値はピリオド「.」で表現される。

SPSSで欠損値を事前に「.」にしておけばよさそうだが、数値変数の欠損値に「.」を指定
すると文字変数とみなされてうまくいかない。

したがって、STATAで変換する必要がある。

例えばSPSSで欠損値を「9999」「-9999」と指定していたらなら、そのままではSTATAでは
それがデータと見なされてしまう。

全ての変数で欠損値を「9999」「-9999」としていたので、以下をコマンドラインで走らせた。
mvdecode _all, mv(9999=.)
mvdecode _all, mv(-9999=.)

もし、すべての変数で欠損値を共通にしていなかったら、変数ごとに
replaceを使うことになったかも。

replace var1=. if var1==9999
replace var1=. if var1==-9999


00:15  |  STATA  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑
2016.08/13(Sat)

STATAのユニコード変換エラー

STATAのコマンドラインから以下を入力して、ファイルをShift JISからユニコード変換しようと
したがエラー。

unicode encoding set "shift_JIS"
unicode translate ファイル名.dta

エラーはこんな感じ。
contents of variable 3 (V3) contain unconvertable characters
contents of variable 4 (V4) contain unconvertable characters

認識不能の文字キャラクタがデータセットに含まれているらしい。文字列変数で
外字とかがあるのだろう。もとのデータを作成したのは他の人なのでどんな
データがあるのか不明なので何とも言えない。

結局、以下をコマンドラインで入力して変換完了。

unicode encoding set "shift_JIS"
unicode translate ファイル名.dta, invalid(mark)

認識不能の文字キャラクタは別なモノに変換して強引に変換したということ。
23:19  |  STATA  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑
 | BLOGTOP |  NEXT