您當前的位置:首頁 > 舞蹈

stata資料清洗常見命令

作者:由 宸星 發表于 舞蹈時間:2021-09-17

首先,

設定檔案路徑

,將所有檔案分門別類並放在一起,便於以後找尋。其次,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”*/

標簽: 變數  資料  tag  year  重複