## よくある問題
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行だけ修正すれば他のコードはそのまま使える
- パス区切りは`/`(スラッシュ)を使う方が安全