mcpField
S
stata-data-cleaning

stata-data-cleaning

github.com/meleantonioデータ・データベース657351 回インストール8 週間前に更新
リポジトリ

stata-data-cleaning について

stata-data-cleaningは、経済学研究者向けにStataで分析用データを整えるスキルです。再現可能な変換の記録と、よくあるデータ品質上の問題の確認を重視します。

主な機能

  1. 01Stataのクリーニング用doファイル生成
  2. 02欠損値と重複の処理
  3. 03データ結合とパネルデータの準備
  4. 04assertによる整合性チェック
  5. 05変数ラベルとコードブックの作成
  6. 06ログと変換過程の記録

活用シーン

  1. 01調査データや行政データのクリーニング
  2. 02分析前の複数データソースの結合
  3. 03パネルデータセットの準備
  4. 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:データを把握する

コードを生成する前に、ユーザーに次の点を確認してください。

  1. データソースは何ですか?(調査、行政データ、API など)
  2. 観測単位は何ですか?
  3. 分析に必要な主要変数は何ですか?
  4. 対処が必要な既知のデータ品質の問題はありますか?
ステップ 2:クリーニングパイプラインを生成する

次の内容を含む Stata do ファイルを作成してください。

  1. プロジェクト情報と日付を含む明確なヘッダー
  2. 環境の設定(clear all、メモリの設定、ログ)
  3. 生データの読み込みと確認
  4. 各変換のコメントによる記録
  5. 最終データセットのコードブックの作成
ステップ 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

ベストプラクティス

  1. 常に clear all から始めることで、クリーンな環境を確保します
  2. ログファイルを使い、すべての変換を記録します
  3. 詳細にコメントを記述し、何をするかだけでなく、なぜ行うかも説明します
  4. assert 文を使い、データエラーを早期に検出します
  5. クリーニング済みデータと併せてデータ辞書を作成します
  6. do ファイルとデータセットにバージョンを付けます

よくある落とし穴

  • ❌ マージ前に重複を確認しない
  • ❌ 欠損値コード(-99、-88 など)への対処を忘れる
  • ❌ 変数や値にラベルを付けない
  • ❌ 生データファイルを上書きする
  • ❌ データ変換を記録しない

参考資料

変更履歴

v1.0.0
  • 包括的なクリーニングテンプレートを含む初回リリース

コメント