stata-data-cleaning について
stata-data-cleaningは、経済学研究者向けにStataで分析用データを整えるスキルです。再現可能な変換の記録と、よくあるデータ品質上の問題の確認を重視します。
主な機能
- 01Stataのクリーニング用doファイル生成
- 02欠損値と重複の処理
- 03データ結合とパネルデータの準備
- 04assertによる整合性チェック
- 05変数ラベルとコードブックの作成
- 06ログと変換過程の記録
活用シーン
- 01調査データや行政データのクリーニング
- 02分析前の複数データソースの結合
- 03パネルデータセットの準備
- 04再現可能なデータ処理の記録
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ meleantonio/ awesome-econ-ai-stuff --skill stata-data-cleaningインストール後、Claude Code で/stata-data-cleaningを入力して読み込まれたか確認します。
同梱ファイルindex.md
詳細
Stata データクリーニング
目的
このスキルは、経済学者が Stata で分析用のデータセットをクリーニング、変換、準備するのに役立ちます。再現性、適切なドキュメント作成、経済学研究でよく見られるデータ品質の問題への対処を重視します。
使用する場面
- 生の調査データや行政データのクリーニング
- 複数のデータソースのマージ
- 欠損値、重複、外れ値への対処
- 分析にすぐ使えるパネルデータセットの作成
- 再現のためのデータ変換の記録
手順
ステップ 1:データを把握する
コードを生成する前に、ユーザーに次の点を確認してください。
- データソースは何ですか?(調査、行政データ、API など)
- 観測単位は何ですか?
- 分析に必要な主要変数は何ですか?
- 対処が必要な既知のデータ品質の問題はありますか?
ステップ 2:クリーニングパイプラインを生成する
次の内容を含む Stata do ファイルを作成してください。
- プロジェクト情報と日付を含む明確なヘッダー
- 環境の設定(clear all、メモリの設定、ログ)
- 生データの読み込みと確認
- 各変換のコメントによる記録
- 最終データセットのコードブックの作成
ステップ 3:ベストプラクティスに従う
assert文を使ってデータの整合性を検証するlabel variableを使って変数にラベルを付ける- カテゴリ変数には値ラベルを使う
- 再現性のためにログファイルを生成する
- 適宜、中間ファイルを保存する
出力例
/*==============================================================================
Project: Economic Analysis Data Cleaning
Author: [Your Name]
Date: [Date]
Purpose: Clean raw survey data for regression analysis
Input: raw_survey_data.dta
Output: cleaned_analysis_data.dta
==============================================================================*/
* ============================================
* 1. SETUP
* ============================================
clear all
set more off
cap log close
log using "logs/data_cleaning_`c(current_date)'.log", replace
* Set working directory
cd "/path/to/project"
* Define globals for paths
global raw_data "data/raw"
global clean_data "data/clean"
global output "output"
* ============================================
* 2. LOAD AND INSPECT RAW DATA
* ============================================
use "${raw_data}/raw_survey_data.dta", clear
* Basic inspection
describe
summarize
codebook, compact
* Check for duplicates
duplicates report id_var
duplicates list id_var if _dup > 0
* ============================================
* 3. VARIABLE CLEANING
* ============================================
* --- Rename variables for clarity ---
rename q1 age
rename q2 income_reported
rename q3 education_level
* --- Clean numeric variables ---
* Replace missing value codes with .
mvdecode age income_reported, mv(-99 -88 -77)
* Cap outliers at 99th percentile
qui sum income_reported, detail
replace income_reported = r(p99) if income_reported > r(p99) & !mi(income_reported)
* --- Clean string variables ---
* Standardize state names
replace state = upper(trim(state))
replace state = "NEW YORK" if inlist(state, "NY", "N.Y.", "N Y")
* --- Create categorical variables ---
gen education_cat = .
replace education_cat = 1 if education_level < 12
replace education_cat = 2 if education_level == 12
replace education_cat = 3 if education_level > 12 & education_level <= 16
replace education_cat = 4 if education_level > 16 & !mi(education_level)
label define edu_lbl 1 "Less than HS" 2 "High School" 3 "College" 4 "Graduate"
label values education_cat edu_lbl
* ============================================
* 4. HANDLE MISSING DATA
* ============================================
* Create missing indicator variables
gen mi_income = mi(income_reported)
* Document missingness
tab mi_income
* Count complete cases
egen complete_case = rownonmiss(age income_reported education_cat)
tab complete_case
* ============================================
* 5. CREATE DERIVED VARIABLES
* ============================================
* Age groups
gen age_group = .
replace age_group = 1 if age >= 18 & age < 30
replace age_group = 2 if age >= 30 & age < 50
replace age_group = 3 if age >= 50 & age < 65
replace age_group = 4 if age >= 65 & !mi(age)
label define age_lbl 1 "18-29" 2 "30-49" 3 "50-64" 4 "65+"
label values age_group age_lbl
* Log income
gen log_income = ln(income_reported + 1)
* ============================================
* 6. DATA VALIDATION
* ============================================
* Assert expected ranges
assert age >= 18 & age <= 120 if !mi(age)
assert income_reported >= 0 if !mi(income_reported)
* Check variable types
assert !mi(id_var)
isid id_var // Verify unique identifier
* ============================================
* 7. LABEL VARIABLES
* ============================================
label variable age "Age in years"
label variable income_reported "Annual income (USD)"
label variable education_cat "Education category"
label variable log_income "Log of annual income"
label variable mi_income "Missing income indicator"
* ============================================
* 8. FINAL CHECKS AND SAVE
* ============================================
* Keep relevant variables
keep id_var age age_group income_reported log_income ///
education_cat mi_income state year
* Order variables logically
order id_var year state age age_group income_reported ///
log_income education_cat mi_income
* Compress to minimize file size
compress
* Save cleaned data
save "${clean_data}/cleaned_analysis_data.dta", replace
* Create codebook
codebook, compact
* Close log
log close
* ============================================
* END OF FILE
* ============================================
要件
ソフトウェア
- Stata 15+(一部のコマンドには新しいバージョンが必要です)
推奨されるユーザー作成コマンド
ssc install unique // For unique value checking
ssc install mdesc // For missing data patterns
ssc install labutil // For label manipulation
ベストプラクティス
- 常に
clear allから始めることで、クリーンな環境を確保します - ログファイルを使い、すべての変換を記録します
- 詳細にコメントを記述し、何をするかだけでなく、なぜ行うかも説明します
assert文を使い、データエラーを早期に検出します- クリーニング済みデータと併せてデータ辞書を作成します
- do ファイルとデータセットにバージョンを付けます
よくある落とし穴
- ❌ マージ前に重複を確認しない
- ❌ 欠損値コード(-99、-88 など)への対処を忘れる
- ❌ 変数や値にラベルを付けない
- ❌ 生データファイルを上書きする
- ❌ データ変換を記録しない
参考資料
変更履歴
v1.0.0
- 包括的なクリーニングテンプレートを含む初回リリース
コメント
Markdown 対応