このブログでは、統計解析ソフトStataのプログラミングのTipsや便利コマンドを紹介しています.
Facebook groupでは、ちょっとした疑問や気づいたことなどを共有して貰うフォーラムになっています. ブログと合わせて個人の学習に役立てて貰えれば幸いです.
さて、本日は、StataのDo-fileでの工夫をご紹介したいと思います.
これもいろいろなやり方があると思うのですが、2020年12月時点で自分がいいと思うやり方を紹介してみたいと思います.
1.フォルダ分け
あくまで個人的なやり方なのですが、自分は研究ごとにフォルダ分けしていて、
- オリジナルデータ
- Do-files
- ログファイル
- 中間データセット・解析データセット
- 結果
かつてはこれらをまとめて格納していましたが、最近では振り分けるようになりました.というのも、CRIC研究のデータを使った研究で論文を作成するのに使ったデータセットやプログラム、SAPなどを最終ドラフトと一緒にPublication Executiveに提出しなければならず、整理整頓が強いられたのがきっかけでした.
それに抱えている案件が多くなるとどうしても毎日取り組むことは難しく、時間がたてばたつほどどこに何があったかを調べるのがとても大変だと気付いたのです.
もともと整理整頓があまり得意でない自分は、意識してやらないととんでもないことになるので、規則を作りながら整頓するようになりました.
2.分けたフォルダ名をマクロにしておく
データセットや出力先はそのDo-fileが置かれている directory がデフォルトの「作業場」になります.つまり、別のフォルダに置いているデータを呼び出したり、データを出力する場所を指定したりしたい場合には、別途working directoryの指定をする必要があります.
そんなときには最初にdirectoryをglobal macroか何かで指定しておく、というのがアイディアです.
例えば下図のように、Project1というフォルダの中にオリジナルデータを入れるdatabox、ログファイルを入れるlog、中間データ・解析用データセットを入れるsaveなどに分けて格納するイメージです.
それ以外にも、色々な研究で共通して使えるような診療マスター(薬剤コードや病名のセットなど)を別のフォルダから呼び出したりすることもできます.
下のようにDo-fileの冒頭でWorking directoryを指定するコマンドを置いておきます.
**** working directory
global wd_data "C:\Users\......\project1\databox\"
global wd_save "C:\Users\......\project1\save\"
global wd_log "C:\Users\......\project1\log\"
global wd_med "C:\Users\...\各種マスター\medicine_master\"
最後のmedicine masterはマスターデータの一種で、標準コードとローカルコードの対応表のようなものを想定しています.
3.データセットをリスト化&マクロで呼び出し
大体普段の自分のプログラムが1500行くらいのことが多いのですが、そうするとどのデータセットを使った解析をしていたかを画面のスクロールをしていちいち確認せねばならず面倒です.
また、データセットの変更があった場合にバージョンの新しいものに差し替えたりするのもすべて探し出して修正する必要があるのでミスを誘発します.
これもマクロでデータセットの文字列を置き換えてしまうとよいと思います.こうすることで使っているデータセットがマクロの指定の部分でリスト化されることになります.
******* Analysis Datasets
global data "abcdefg.csv"
global admdata "入退院歴.csv"
global kangodata "看護データベース.csv"
global labodata "検歴結果.csv"
このようにすることで
import delimited $data , encoding(Shift_JIS) clear
こうやってデータを呼び出すことができ、省スペース化も図れます.
4.Do-fileのナンバリング
最後に、Do-fileのナンバリングについて説明します.これは作業工程をブレイクダウンしておいておくためのナンバリングです.
自分の場合はコホート全体のデータ加工と派生研究課題の解析は別々に扱いたい、というような気分に基づいて分けています.
必要に応じてフォルダも分けますが、同一フォルダ内に複数のDo-fileを置いておく場合には自分なりにルールを作って仕分けをしておくとわかりやすいと思います.
00_で始まるDo-fileはデータクリーニング、01_はテーマ①、02_はテーマ②、などのような感じです.
まとめ
どちらかと言えば自分の普段のワークフローをご紹介した記事でしたが、いかがだったでしょうか?
ちなみにログは毎日の作業記録を取る意味で必ず取るようにしています.
作業を可視化すること、記録に残すこと、整理整頓して無駄な時間を使わないようにすること、という意味でお役に立てたら幸いです.
コメント