## よくある問題 Stataを使い始めた頃、こんな経験はありませんか。 - `use "data.dta"`と入力したのに「file not found」とエラーが出る - ファイルはデスクトップに置いてあるのに、なぜか開けない - 昨日まで動いていたdo-fileが、別のパソコンでは動かない - USBメモリからデータを読み込もうとしても失敗する これらの問題の多くは、**作業ディレクトリ**の設定が原因です。Stataは「今どこで作業しているか」を常に把握しており、その場所を基準にファイルを探します。作業ディレクトリの概念を理解すれば、これらの問題を解決できます。 ## コマンド ```stata * 現在の作業ディレクトリを確認 pwd * 作業ディレクトリを変更 cd "path/to/directory" ``` ## 何をするコマンド? ### ディレクトリとは **ディレクトリ(Directory)** とは、ファイルを整理して保管する「フォルダ」のことです。パソコンの中では、ファイルがディレクトリ(フォルダ)に入れられて階層構造で管理されています。 例えば: - `Documents`ディレクトリの中に`my_project`ディレクトリがある - その中に`data.dta`というファイルがある このような階層構造になっています。 ### パスとは **パス(Path)** とは、ファイルやディレクトリの場所を示す「住所」のようなものです。 例えば、実際の住所で考えると: - 住所:「東京都渋谷区○○町1-2-3 山田ビル 101号室」 - パス:`/Users/username/Documents/my_project/data.dta` どちらも「階層構造で場所を特定している」という点で同じです。 実際のパスの例: - `/Users/username/Documents/my_project/data.dta` これは「Usersフォルダの中のusernameフォルダの中のDocumentsフォルダの中のmy_projectフォルダの中にあるdata.dtaファイル」という意味です。`/`(スラッシュ)で階層を区切って表現します。 パスには2種類あります: - **絶対パス**: ルート(最上位)から目的地までの完全な道筋(例:`/Users/username/Documents/data.dta`) - 住所で言えば:「東京都渋谷区○○町1-2-3」のように都道府県から全て書く方法 - **相対パス**: 今いる場所からの道筋(例:作業ディレクトリが`/Users/username/Documents`なら、`data.dta`だけで指定できる) - 住所で言えば:「隣の建物」「2つ先の角」のように現在地を基準にした書き方 #### 相対パスでの特殊な記号 相対パスでは、以下の記号を使って現在位置を表現できます: - **`.`(ドット)**: 現在いるディレクトリを表す - 例:`./data.dta` は現在のディレクトリ内の`data.dta`という意味 - `data.dta`と書くのと同じ意味ですが、明示的に「ここ」を表現できる - **`..`(ドット2つ)**: 一つ上の階層(親ディレクトリ)を表す - 例:現在`/Users/username/Documents/my_project`にいる場合 - `../other_project/data.dta`は、一つ上の`Documents`に戻ってから`other_project`フォルダの`data.dta`を指す 具体例: ```stata * 作業ディレクトリが /Users/username/Documents/my_project の場合 * これらは全て同じファイルを指す use "data.dta" use "./data.dta" * 一つ上の階層にあるファイルを読み込む use "../shared_data.dta" // /Users/username/Documents/shared_data.dta * サブフォルダ内のファイル use "./raw/data.dta" // /Users/username/Documents/my_project/raw/data.dta use "raw/data.dta" // 同じ意味 ``` ### 作業ディレクトリとは **作業ディレクトリ(Working Directory)** とは、Stataがファイルの読み書きを行う際に基準となるディレクトリ(フォルダ)のことです。 普段あまり意識していないかもしれませんが、Stataを含むすべてのアプリケーションは「今どのディレクトリで作業しているか」という情報を常に持ちながら動作しています。Stataでファイルを読み込んだり保存したりする際、この作業ディレクトリが基準位置として使われます。 - `pwd`: 現在の作業ディレクトリのパスを表示する(Print Working Directoryの略) - `cd`: 作業ディレクトリを指定したパスに変更する(Change Directoryの略) 作業ディレクトリを設定することで、ファイルパスを毎回フルパスで指定する必要がなくなり、相対パス(`data.dta`や`./data.dta`のような書き方)でファイルを扱えるようになります。 ## 使い方の実例 ### コマンドでの確認と変更 #### 現在のディレクトリを確認 ```stata . pwd /Users/username/Documents ``` #### ディレクトリを変更 ```stata * Macの場合 . cd "/Users/username/Documents/my_project" /Users/username/Documents/my_project . pwd /Users/username/Documents/my_project * Windowsの場合 . cd "C:/Users/username/Documents/my_project" C:/Users/username/Documents/my_project ``` **注意**: Stataでは、Windowsでも`/`(スラッシュ)を使う方が推奨されます。`\`(バックスラッシュ)は特殊文字として扱われるため、避けた方が無難です。 ### ファイル操作での活用 作業ディレクトリを設定すると、ファイルの読み込みが簡潔になります。 ```stata * 作業ディレクトリを設定 cd "/Users/username/Documents/my_project" * 相対パスでファイルを読み込める use "data.dta", clear // フルパス不要 * サブフォルダ内のファイルも相対パスで指定 use "data/raw_data.dta", clear ``` ### フォルダを移動したときの柔軟性 `cd`の便利な点は、プロジェクトフォルダを別の場所に移動した場合でも、do-fileの冒頭の`cd`の1行だけを修正すれば、他のコードはそのまま動作することです。 例えば、プロジェクトフォルダをデスクトップからCドライブの奥深くに移動した場合: ```stata * 移動前(デスクトップ) cd "/Users/username/Desktop/my_project" use "data.dta", clear save "output/result.dta", replace * 移動後(Cドライブ)- cdの1行だけ変更 cd "C:/Projects/analysis/my_project" use "data.dta", clear // このコードは変更不要 save "output/result.dta", replace // このコードも変更不要 ``` フォルダ内の階層構造が同じであれば、`cd`以降のコードは全て相対パスで書かれているため修正不要です。 ## いつ使う? ### データ読み込み時 複数のデータファイルを読み込む際、作業ディレクトリを設定しておくとパス指定が簡単になります。 ```stata cd "/Users/username/Documents/analysis" use "file1.dta", clear merge 1:1 id using "file2.dta" merge 1:1 id using "file3.dta" ``` ### 結果出力時 グラフや解析結果を保存する際も、作業ディレクトリに保存されます。 ```stata cd "/Users/username/Documents/analysis" sysuse auto, clear graph twoway scatter mpg weight graph export "output_plot.png", replace ``` ### プロジェクト開始時 新しい解析プロジェクトを始める際、do-fileの冒頭で作業ディレクトリを設定する習慣をつけると、コードの管理が楽になります。 ```stata * do-fileの冒頭で設定 cd "/Users/username/Documents/project_2024" pwd // 確認 ``` ## 注意点 ### パス区切り文字の推奨 - **Mac/Linux**: `/`(スラッシュ)を使用 - **Windows**: Stataでは`/`(スラッシュ)を使う方が推奨 - `\`(バックスラッシュ)は特殊文字として扱われるため注意 ```stata * 推奨(Windows/Macどちらでも動作) cd "C:/Users/username/Documents" * 非推奨(特殊文字としての問題が起きる可能性) cd "C:\Users\username\Documents" ``` ### パスにスペースが含まれる場合 パスにスペースが含まれる場合は、必ず引用符(`"`)で囲みます。 ```stata * OK cd "/Users/username/My Documents/analysis" * NG(エラーになる) cd /Users/username/My Documents/analysis ``` ### 相対パスの活用 do-fileを他の人と共有したり、別のコンピュータで実行する場合、絶対パスではなく相対パスを使う方が汎用性が高くなります。 ```stata * 絶対パス(他の環境で動かない可能性大) use "/Users/username/Documents/my_project/data.dta", clear * 相対パス(作業ディレクトリを設定すれば動作) cd "/Users/username/Documents/my_project" use "data.dta", clear ``` ## まとめ - `pwd`で現在の作業ディレクトリを確認 - `cd`で作業ディレクトリを変更 - ファイルの読み書きの際、相対パスが使えるようになる - フォルダを移動した場合も、`cd`の1行だけ修正すれば他のコードはそのまま使える - パス区切りは`/`(スラッシュ)を使う方が安全