作者:李剛 (中南財經政法大學)
郵箱:gang.li.0814@gmail.com
Stata連享會 計量專題 || 公眾號合集
點擊查看完整推文列表北京, 1月8-17日,連玉君-江艇主講
2020寒假Stata現場班(西安, 3月26-29日,司繼春-遊萬海 主講; 內附助教招聘)
連享會-文本分析與爬蟲專題班,西北工業大學,2020.3.26-29數據處理過程中,通常面臨數據集格式轉換的難題,相比 Stata 的 .dta 數據文件,使用更廣泛的是 Excel 數據。那麼如何將 .dta 數據轉換成以 .xls 或 .xlsx 後綴的 Excel 數據呢?
本文介紹的 export excel 命令便是主要解決此問題。下面將圍繞用法和應用案例兩方面展開,主要介紹命令的使用。
若採用窗口操作,相應的流程為:File → Export → Data to Excel spreadsheet(_.xls; _.xlsx)。
2. 用法介紹下面,我們分兩個小節,分別介紹 export excel 的基本語法和各個選項。
2.1 基本語法export excel 的基本語法如下:
export excel [using] filename [if] [in][, export_excel_options]
其中,export excel 為命令主體,不可省略;using 為指定使用的文件,導出整個數據集時可省略;export_excel_options 為在基礎命令上添加的選項,詳細介紹見 2.2 小節。若只需導出部分變量名,則可在excel export 後面添加相應的變量名,需要注意,此時的 using 不可省略,對應的語法如下:
export excel [varlist] using filename [if] [in][, export_excel_options]
2.2 選項介紹export excel 包含了豐富的選項,下面從主要選項 (Main Options) 和其他選項 (Advanced Options) 兩方面進行介紹,並重點選取數據處理常用的進行詳細說明。
主要選項 (Main Options)選項用途replace覆蓋已有文件firstrow(variables or varlabels)設置導出數據第一行為變量名還是變量標籤sheet("sheetname")指定 sheetnamecell(start)從 start (upper-left) 開始寫入數據sheetmodify不修改導出範圍之外的數據,不能和 sheetreplace replace 選項連用sheetreplace導出之前先將 sheet 數據清除 ,不能和 sheetreplace replace 選項連用nolabel導出變量值,而不是變量的值標籤keepcellfmt保留已有表格的單元格格式值得說明的是:常用的是 sheet("sheetname") firstrow(variables|varlabels) replace 選項。
sheet() 選項可以指定導出到 Excel 時數據的 sheet 名稱,可是實現按需求修改 sheet 名的功能,套用在循環中使用比較方便,可以參見下文 3.1 小節 Task2 中的用法。firstrow(variables|varlabels)選項可以指定導出到 Excel 時表頭為變量名還是變量標籤,當不添加 firstrow 選項時,默認時導出數據,不包含變量名。replace 選項如同其他命令中的用法,覆蓋已有數據,一般必選,否則報錯 file already exists 。但當使用sheet() 選項時repalce 可以省略,表示在一份 Excel 表格中寫入多張 sheet **。下面為大家演示 sheet("sheetname") 和 firstrow(variables|varlabels) 的使用效果,注意仔細觀察導出的 Excel 文件 sheet 名 和 表頭 的區別。
sysuse auto, clear
* 設定 Excel 文件的子表 (Sheet) 名
export excel using "auto.xls", replace sheet("auto")
//結果:注意觀察 Excel 文件的 Sheet 名
* 導出Excel的表頭為變量名
preserve
keep make price mpg rep78
export excel using "auto_varname.xls", firstrow(variable) replace
restore
/*結果:auto_varname.xls 的前三行
make price mpg rep78
AMC Concord 4,099 22 3
AMC Pacer 4,749 17 3
*/
*設定導出Excel的表頭為變量名
preserve
keep make price mpg rep78
export excel using "auto_varlabel.xls", firstrow(varlabel) replace
restore
/*結果:auto_varlabel.xls 的前三行
Make and Model Price Mileage (mpg) Repair Record 1978
AMC Concord 4,099 22 3
AMC Pacer 4,749 17 3
*/
按照 rep78 變量(汽車 1978 年維修次數) 將 auto.dta 拆分成 Excel 格式的子集 。
Task1: 按照 auto_rep78_i_.xls 命名文件,其中 i 表示相應維修次數;Task2: 生成 auto_rep78_all.xls數據集,其中一個 Sheet 對應一個子集。提示:解決這兩個問題的關鍵在於 2.2 部分重點介紹的 sheet("sheetname")和firstrow(variables|varlabels) 兩個選項的使用。
sysuse auto, clear
tabulate rep78 //列表呈現 rep78 的類別和頻數分布
levelsof rep78,local(rep)
foreach i in `rep'{
preserve
keep if rep78 == `i'
export excel using "auto_rep78_`i'.xls", firstrow(variable) replace
export excel using "auto_rep78_all.xls", firstrow(variable) sheet(`i')
restore
}
使用 export excel 導出 nlsw88.dta數據集的 變量名 和 變量標籤 ,存在name和 varlabel兩列,文件名為 nlsw88_varname_varlab.xls 。
處理思路: 導入 nlsw88.dta 數據 --> 使用 firstrow(variable) 選項獲取變量名 (Data1) --> 使用 firstrow(varlabel) 選項獲取變量標籤(Data2) --> 合併 Data1 和 Data2 --> 由行轉置為列 。
sysuse nlsw88, clear
*獲取變量名
preserve
export excel using "nlsw88_varname.xls" in 1,firstrow(variable) replace
import excel using "nlsw88_varname.xls", clear
keep in 1
save "nlsw88_varname.dta", replace
restore
*獲取變量標籤
export excel using "nlsw88_varlab.xls" in 1, firstrow(varlabels) replace
import excel using "nlsw88_varlab.xls", clear
keep in 1
save "nlsw88_varlab.dta", replace
*合併、轉置
use "nlsw88_varname.dta", clear
append using "nlsw88_varlab.dta"
sxpose, clear
rename _var1 varname
rename _var2 varlabel
list varname varlab, noobs
export excel using "nlsw88_varname_varlab.xls",firstrow(variable) replace
/*
+-+
| varname varlabel |
|-|
| idcode NLS id |
| age age in current year |
| race race |
| married married |
| never_married never married |
|-|
| grade current grade completed |
| collgrad college graduate |
| south lives in south |
| smsa lives in SMSA |
| c_city lives in central city |
|-|
| industry industry |
| occupation occupation |
| union union worker |
| wage hourly wage |
| hours usual hours worked |
|-|
| ttl_exp total work experience |
| tenure job tenure (years) |
+-+
*/
小彩蛋:describe, replace 命令可以快速實現上述需求,將數據集的 position, name, type, isnumeric, format, vallab, varlab 導出到一個新的數據集。
sysuse nlsw88, clear
describe, replace
describe
list name varlab, noobs
keep name varlab
export excel using "nlsw88_varname_varlab.xls",firstrow(variable) replace
4. 附:文中所有代碼
* ##2.2 介紹 firstrow 和 sheet 的使用
sysuse auto, clear
*設定Excel文件的Sheet名
export excel using 「auto.xls", replace sheet("auto")
*導出Excel的表頭為變量名
preserve
keep make price mpg rep78
export excel using "auto_varname.xls", firstrow(variable) replace
restore
*設定導出Excel的表頭為變量名
preserve
keep make price mpg rep78
export excel using "auto_varlabel.xls", firstrow(varlabel) replace
restore
* ## 3.1 案例一
sysuse auto, clear
levelsof rep78,local(rep)
foreach i in `rep'{
preserve
keep if rep78 == `i'
export excel using "auto_rep78_`i'.xls", firstrow(variable) replace
export excel using "auto_rep78.xls", firstrow(variable) sheet(`i')
restore
}
* ## 3.2 案例二
sysuse nlsw88, clear
*獲取變量名
preserve
export excel using "nlsw88_varname.xls" in 1,firstrow(variable) replace
import excel using "nlsw88_varname.xls",clear
keep in 1
save "nlsw88_varname.dta", replace
restore
*獲取變量標籤
export excel using "nlsw88_varlab.xls" in 1, firstrow(varlabels) replace
import excel using "nlsw88_varlab.xls",clear
keep in 1
save "nlsw88_varlab.dta", replace
*合併、轉置
use "nlsw88_varname.dta", clear
append using "nlsw88_varlab.dta"
sxpose, clear
rename _var1 varname
rename _var2 varlabel
list varname varlab, noobs
export excel using "nlsw88_varname_varlab.xls",firstrow(variable) replace
關於我們歡迎加入Stata連享會(公眾號: StataChina)