調研問卷數據錄入後,stata下清理工作應該如何完成?需要注意的方面有哪些?

原始數據難免有各種填寫和錄入不規範的問題,能否簡單科普下拿到數據後應該如何著手清理,並進行初步的分析?


簡單分享一下~大致但不限於以下:

  1. browse x1 x2

主要內容:大致觀察、感受數據
在data browser里大致瀏覽數據的完整度,有效性等等,對數據的質量有一個粗略的了解。

2. tab x1 x2 / hist x1 / sum x1 x2 / *kdensity x1
主要內容:觀察數據的特徵

查看關心變數的分布,描述性統計和直方圖(核密度圖),看看描述性統計符不符合直覺(例如男性收入一般比女性高等);排除輸入錯誤的數據(例如原本應為正數的數據出現了負數,或是應為整數的出現了小數等等);看看存不存在異常值(outliers)

3. replace x1=... if .... / gen y1=.... (if) / tab(x1),gen(x1) / rename x1 y1
主要內容:剔除異常值,構造/轉換變數,方便以後的處理

考慮將異常值替換為缺失值;按照資料庫中的信息重新定義變數,或轉換數據(log形式等);將一些文本變數,例如將省份的code轉換為省份的dummy;把問卷中沒有幫助記憶的變數名改過來便於往後的處理。

4.keep (if) .... / drop ... (if) ...
主要內容:把滿足要求的數據保留(其餘剔除)/ 剔除(其餘保留)

留下最後clean的database,充滿成就感,內牛滿面〒▽〒

5.初步分析
初步研究變數與變數間關係。
(1)作散點圖和擬合線
twoway (scatter y x)(lfit y x) //用於線性關係
twoway (scatter y x) (qfit y x) //用於二次關係
twoway (lfitci y x,stdf ciplot(rline)) (scatter y x) //帶置信區間的線性擬合,幫你識別異常值和尋找一些有趣的結論。例如相同平均教育水平下的哪個地區的收入水平較高等等
(2)兩兩相關矩陣(pairwise correlation matrix)
pwcorr x1 x2 x3, sig star(0.05)
*顯示感興趣變數兩兩相關係數,並顯示顯著性,給0.05以下的加星號

*6.特殊情況:
(1)時間序列: generate t=2000+_n-1/ tsset t, annual / reshape long var,i(year) j(month)
(2)如果數據是按行排列的:先在EXCEL里把數據轉置一下再import
(3)合併資料庫:這一點挺麻煩的,有時間再詳說。


前期數據清理與整理的重點與難點不在於技術層面,而在於處理過程的可追溯性可重複性,而這是任何一本教科書或軟體指南都不會教的。
關於這一點,Marc Bellemare(Cornell農經phd,現UMN Twin Cities農經教授)去年專門寫了一篇指南,附地址:http://marcfbellemare.com/wordpress/11215

這篇文章載於他的博客,他的博文質量很高,更新也勤,主要是農經和發展方面的學術思考。


一、錄入
對紙質調研問卷的錄入,規範的錄入方式應該是對數據獨立雙次錄入,使用EpiData這樣的錄入軟體更可以有效地控制錄入質量。
對雙次錄入後的數據集,使用cf命令進行一次性檢查,直至完全一致。

二、對數據逐個變數檢查
1、先總覽一下數據集,對數據集進行描述,命令為describe,可跟varlist。選擇項可加short、simple只顯示頭部信息或變數名稱。
2、對變數值進行檢查
對於分類變數,使用tabulate命令,了解變數值的頻數。該命令後必加varlist。tab1加多個變數可對多個變數逐個描述,tabulate或tab2加兩個或以上變數會對任何一個兩兩變數組合進行二維描述。
對於連續型變數的取值,使用的命令是summarize,可跟varlist。加detail選擇項可顯示額外的統計量,如skewess、kurtosis和各種百分比等。
inspect命令可顯示所指定變數或全部變數的正負零值數量、唯一值數量、缺失值數量、一個小直方圖等,可幫助用戶快速熟悉數據,適用於前兩種變數。

三、通過交叉表對數據進行檢查
對分類變數的兩兩交叉,使用tab2。如果想知道某一組合頻數,可使用count if varA==avarB==b。
也可使用table命令,生成的表格更簡潔。

四、通過分層對數據進行檢查
如果兩個變數組合是分類變數×連續變數,可使用summarize var連續 if var分類(==a)來對連續變數取值進行檢查。若分類變數取值過多,可加bysort前綴。
tabstat命令可用來顯示概要統計表格:tabstat var連續,by (var分類) statistic(n mean sd min max) missing

五、通過邏輯對數據進行檢查
通過專業常識,保留或剔除(keep或drop)錯誤數據。通過查看頻數(tab)、統計特徵(summ)、對符合某條件的記錄進行計數(count if)、列出查看變數值(list [varlist] [in] [,mean(var) sum(var)])進行檢查。

六、數據更正
第一步是記錄問題,推薦通過命令注釋來記錄。
第二步是更正數據,注意要用命令,而最好別直接通過數據編輯器修改。命令如replace varA= if varB==。

七、識別重複數據
Stata檢查唯一識別符是否唯一的命令是isid[varlist][,missok]。如果存在不唯一,可先生成一個重複記錄的報告,命令是duplicates report [varlist]。duplicates example [varlist] 只顯示重複成一組的組內頭條記錄。如果想對重複的記錄加標註,可用duplicates tag, generate(dup)命令。若刪除重複記錄,可使用duplicates drop[, force]。

八、對缺失值進行檢查
Stata 默認缺失值為小數點「.」,還提供了26個字元作為擴展缺失值。由於問卷對缺失值使用一些數字表示,因此導入Stata後必須重新編碼。

1、缺失值編碼
Change missing values to numeric values:
mvencode varlist [if] [in], mv(#|mvc=# [ mvc=#...] [ else=#]) [override]
Change numeric values to missing values:
mvdecode varlist [if] [in], mv(numlist | numlist=mvc [ numlist=mvc...])

2、缺失值函數:missing(varlist),如果變數存在缺失值,則返回值為1。如計算符合某條件且變數非缺失值的記錄個數,可使用命令 count if varA !missing(varB)

3、缺失值檢查
如tab var if missing(var), missing。
要檢查多個分類變數,可使用foreach循環語句。
Stata還有專門描述缺失值的命令misstable
Report counts of missing values:
misstable summarize [varlist] [if] [in] [, summarize_options]
Report pattern of missing values:
misstable patterns [varlist] [if] [in] [, patterns_options]
Present a tree view of the pattern of missing values:
misstable tree [varlist] [if] [in] [, tree_options]
List the nesting rules that describe the missing-value pattern:
misstable nested [varlist] [if] [in] [, nested_options]

數據清理耗時耗力,應制定計劃重視細節,善於與經驗豐富者交流,形成好的個人習慣,確保數據完整性。


謝邀。
抱歉,我平時用sas清理數據,個人感覺整理數據sas更強,尤其是sas EG,界面看起來更清楚。
其他朋友已經說了很多命令層面的東西,我補充一點實際工作的體會。

首先,在問卷設計的時候就要考慮到後期整理數據,我看見過一些設計的巨複雜的紙質問卷,這些問卷後期整理成一條一條的人記錄或者戶記錄很繁瑣。
其次,設計問卷後要寫好問題間的邏輯審核關係,前期受累後期舒心。一類是絕對的錯誤,例如選項總共只有4個,錄入時手誤為7;一類是邏輯上錯誤,例如婚姻狀況填已婚,但是年齡填16歲。最好將這些審核關係寫完善,隨錄隨審。沒錄完一個人或者一戶、一個企業,整個再審核一遍,將整理數據提前到錄入階段。
再次,要有一個好的錄入軟體,建立標準化的資料庫,防止傳輸拷貝過程中的二次錯誤。
最後,拿到手的原始數據再用各種命令check一下。


如圖,建立標準化,結構化,規範化的資料庫即可完美解決。


一般對於感興趣的連續變數我會用
codebook [varname] 或者 sum [varname], detail
看看上下限的值是不是符合常識。。當然,作圖會更直觀,但是以上更快~
還有就是Missing data 你是標註為 . (連續變數), ""(string variable)還是其他數字例如99, 999999 等要弄清楚
想起別的再補充:)


沒有固定的方法
可以買本下面的書看看

社會調查數據管理 基於Stata 14管理CGSS數據


推薦閱讀:

大學專業,軟體工程、金融學、經濟學。哪個比較實用,就業率高,前景好?另外想問下金融學和經濟學的區別?
可以用錢買到喜歡的人嗎?
美國為什麼不能通過印製美元來償還中國購買的美國國債?
在做眾籌時如何選擇回報對他人吸引力更大?
封建社會有通貨膨脹嗎?如果有,政府有「宏觀調控」措施嗎?

TAG:數據 | 經濟學 | 計量經濟學 | Stata | 農業經濟學 |