■
- capture
doファイルを回しているときに作業とは関係がない箇所でerrorが出て作業が中断されて困った経験があるので探してみたら,captureコマンドが便利そう。
例えばすでにlogファイルを開いているのに,それに気づかずdoファイルを回していて,途中のlog usingの箇所でエラーがでたり,
doファイルの一部を回していて,そのなかのgenerateコマンドの箇所で,すでにその変数は定義されています,とエラーがでるなど。。(こんな間抜けなのは僕だけ?)
captureコマンドは,アウトプットを無視して先に進むコマンドです。上の例で言うとlog usingを
capture log close log using hogehoge
とすることで,問答無用で先に進むことができます。capture無しですと,logファイルが開かれていない場合は1行目でdoファイルが中断されますが,captureコマンドをつけることにより,logファイルが開かれていない場合もエラーが出ずに2行目以降に進みます。
また何度も部分的にやり直したいdoファイルあたりのgenerate分は
capture drop moge gen moge = .
などとすることで幸せになれます。
- levelsof
ある変数に含まれる要素の一覧を入手できます。あまり用途が思いつかないですが,local変数なんかと組み合わせると,例えば
sysuse auto, clear levelsof rep78 local n = r(levels) foreach hoge of local n{ dis `hoge' }
のように各要素ごとに処理をすることなんかも可能です。まぁ上の例も芸がないですが。。
変数がstringの場合には,ダブル・クォーテーションで要素を囲みますが,cleanオプションで外すことができます。