stata資料清洗常見命令
首先,
設定檔案路徑
,將所有檔案分門別類並放在一起,便於以後找尋。其次,log檔案是為了儲存命令執行的結果。最後,設定stata工作路徑。
螢幕的滾屏顯示命令
。
*****************1。設定工作路徑與生成Log檔案*******************
* 建立路徑(每個人的路徑及其名稱不一樣,這裡容易執行出錯!)
global Do “D:\Stata\連享會\資料清理\DoFiles” //存放各類do檔案
global Raw “D:\Stata\連享會\資料清理\RawData” //存放原始資料
global Work “D:\Stata\連享會\資料清理\WorkingData” //存放清理後的資料
global Out “D:\Stata\連享會\資料清理\OutFiles” //存放分析結果
global Ref “D:\Stata\連享會\資料清理\Reference” //存放各種參考資料、文獻等
* 設定 Stata 環境
cd “$Work” //設定工作路徑(可以自行進行修改)
capture log close //關閉以前的log檔案,加capture不會報錯
log using “$Work\datacleaning”, replace //新建一個名為datacleaning的log檔案
/* log 檔案可以完整儲存 Stata 介面的分析過程,以防沒有及時儲存或者想回溯之前的清理工作。*/
set more off //連續滾屏顯示命令執行結果
/*set more on是恢復分頁顯示結果*/
設定完檔案路徑後,即可開啟資料。
讀取資料
這裡提供四種方法。當然還有一種就是在Excel表中複製貼上到do檔案中執行。
*****************2。讀取資料+熟悉資料***************************
* 讀取資料
/* 讀取資料常用的四種方法,注意下面提供的方法用一個就可以,把xx換成你的目標檔名,然後再執行 。*/
use xx。dta //讀取本地資料
sysuse xx,clear //讀取系統資料
webuse xx,clear //直接讀取網路資料
import excel xx。xlsx,clear //可讀取除stata格式以外的其他資料(如xlsx資料)
/*讀取資料還有一種方法,將Excel整理好的資料複製貼上到do檔案中,僅供參考,缺失值用”。“*/
clear
input vid fid pid relation year province a1 a2 a3 a4 a5
1 1 1 1 2001 1 1 1971 1 11 2000
1 1 2 2 2001 1 2 2004 1 10 3000
1 1 3 3 2001 1 1 1996 0 。 。
1 1 4 4 2001 1 2 1941 1 。 。
1 2 5 4 2001 1 1 1956 0 8 3000
1 2 6 2 2001 1 3 1960 1 8 2000
1 2 7 3 2001 1 2 1981 1 11 4000
2 3 8 5 2001 2 1 1969 1 4 2000
2 3 9 1 2001 2 2 1971 1 11 4000
2 3 10 1 2001 2 2 1993 1 。 。
end
save “$Raw\hh_year2001_exp1。dta”,replace//注意檔名不要出錯
browse//開啟資料管理器(瀏覽)
資料錄入後,由於資料庫變數較多,容量較大。因此我們需要將精力放在我們關心的或者需要的變數上。因此,需要
保留
(keep)
我們需要的刪除
(drop)
我們不需要的變數
。
刪除後需要
檢視變數
,熟悉變數的性質、屬性。des,sum,codebook,inspect四個放一起使用即可。
*****************3。整理變數+提取變數***************************
/*在開始處理資料前,一定要對原始資料進行備份(在不同地方多做幾個備份!)*/
* 保留或刪除變數
use “$Raw\hh_year2001”,clear
keep vid-year a1-a3 //保留 vid-year 以及 a1-a3 之間所有變數,等價於命令“drop province a4 a5”
keep in 2/10 //保留第 2 個到第 10 個之間的所有觀測值 ,等價於命令“drop in 1”
/*keep命令不改變原檔案hh_year2001的原始資料*/
* 變數的檢視
use “$Raw\hh_year2001”,clear
browse //檢視發現keep命令確實不改變原檔案hh_year2001的原始資料
/*檢視變數可同時用命令sum、codebook、inspect)*/
summarize a1-a5 //顯示變數a1到a5的描述性統計
codebook a1 //詳細顯示變數a1的資訊
inspect a2 //詳細顯示變數a2的資訊,但是和上面的形式不一樣
確認刪除後的變數是我們所需要的,此時,由於資料庫如CFPS有2012年、2014年的資料,當我們需要時間序列資料時,需要將兩份資料合併在一起。使用
縱向新增資料命令append
。當然在合併不同年份資料前,需要保證這兩個年份的資料的列屬性都是完全相同的且一一對應的。
批次修改變數名 renvars
。
再如,我們有村莊資料和農戶資料,由於這兩份資料的列屬性不完全一樣,我們需要將兩份表進行
關聯操作,使用merge命令進行橫向新增資料
。merge命令較為複雜,可以百度學習。進行merge之前,需要將資料中的重複值刪除。
刪除資料中的重複值
命令如下:
duplicates report //顯示重複值。根據所有列屬性,所有的值都是一樣的
duplicates tag,gen(tag) //標記重複值。生成一個新變數tag標記重複值
tab tag //tag=0說明沒有重複的變數個數,tag=1說明是重複的變數個數
list _all if tag!=0 //顯示重複的資料是哪幾行
drop tag //刪除tag這個臨時變數,否則下次執行會報錯
duplicates drop vid year,force //刪除重複中的多餘的變數,保留一個
本小部分完整的do檔案如下:
*****************4。資料的合併與轉換****************************
* 縱向新增資料 append
use “$Raw\hh_year2021。dta”,clear //開啟上面儲存的資料
browse
/* 資料對應,如圖所示 */
renvars vid2021 fid2021 pid2021 relation2021 \ vid fid pid relation//批次修改變數名,將左邊原始的改為右邊的形式,以便於合併
browse
append using “$Raw\hh_year2001。dta” //將2001的資料縱向合併在2021資料下方)之後應開啟資料視窗檢查變數對應情況
save hh_data。dta,replace
browse
* 橫向合併資料 merge,在橫向合併之前先刪除重複樣本資料
use “$Raw\village_data。dta”,clear //村莊資料
browse
*list in 2/5 //顯示資料的第2行到第5行的所有資料
duplicates report //根據所有列屬性,所有的值都是一樣的
*duplicates report vid year //根據列屬性vid year顯示這兩個屬性對應的數值一模一樣的
duplicates tag,gen(tag) //標記重複值,生成一個新變數tag標記重複值
*duplicates tag vid year,gen(tag) //標記重複值,根據vid year兩個列屬性進行標記
tab tag //tag=0說明沒有重複的變數個數,tag=1說明是重複的變數個數
list _all if tag!=0 //顯示重複的資料是哪幾行
*duplicates drop,force//drop後面必須有列屬性
drop tag //刪除tag這個臨時變數,否則下次執行會報錯
duplicates drop vid year,force //刪除重複中的多餘的變數,保留一個
*drop if tag!=0//刪除所有重複的變數
*merge 1:m using hh_data。dta //缺少列屬性是不行滴
merge 1:m vid year using hh_data。dta
/*在merge之前,要確定是什麼形式,另外選擇vid year這兩個列屬性是因為它們的資料自身會有重複)*/
/*如果資料1中某變數的資料是唯一的,而資料2中某變數的資料有多個,則用merge 1:m;*/
/*將主檔案(村資料)根據 vid 和 year 與匹配檔案(農戶資料)
進行對應,一個村莊觀察值將對應多個家庭觀察值*/
keep if _merge==3
//保留成功匹配上的資料,1 表示僅來自主檔案,2 表示僅來自子檔案,3 代表被匹配上的觀察值
drop _merge
save vill_hh。dta ,replace
合併完資料後,再次
檢查資料
是否無誤。
由於前面我們已經進行了刪除重複值的操作,這裡檢查資料是為了檢查是否仍存在重複值。
檢查是否有重複值的命令有isid、unique、duplicates
。
檢查資料,一方面是資料是否有重複值,另一方面是資料的格式是否正確。
比如我們研究地區效應,資料庫中顯示的是“東”、“中”、“西”,需要將其轉換為分類變數即0,1,2。那麼
轉換資料格式並新增值標籤encode
也是重要的。
*****************5。檢查資料************************************
/*確保進入下一步之前,我們的資料沒有重複值*/
* 檢視標識變數 isid unique duplicates
use hh_data,clear
browse
isid pid year //方法一:執行結果為空表明標識變數唯一且不重複
unique pid year //方法二:顯示非重複值個數
duplicates report pid year //方法三:顯示標識變數的重複次數
duplicates list pid year //方法四:展示重複值
duplicates tag pid year, gen(tag1) //方法五:標記重複值
tabulate tag1
drop tag1
* 檢查變數基本情況
describe //對所有變數進行展示
sum a1-a3 // sum 適用於數值型變數統計描述
* 列資料格式轉換
tostring a1,replace //將 a1 變數轉換成字元型變數
browse
destring a1,replace //將字元型變數a1轉換為位元組型變數
browse
tostring province,replace //將省程式碼轉換為字元型變數
replace province=“湖南” if province==“1” //將字串資料“1”轉換為字串“湖南”,下同
replace province=“山東” if province==“2”
list province in 1/10
encode province,gen(provid) /*生成一個新變數provid,內容和原變數provice一模一樣,但是provid變數是長整型,且其值標籤也是provid*/
label list provid
/*label list可在視窗檢視變數provid的資料“山東”,“湖南”,對應於其原始變數provice的資料“1”,“2”*/
上一篇:有哪些讓你瞬間清醒的文案?
下一篇:剛畢業,外地工作,該不該買車?