文章來源:小花經(jīng)濟學(xué)術(shù)公眾號 已獲得授權(quán)
今天給大家推送一個很實用的技巧,用 Stata 批量讀取多張工作表的 Excel 數(shù)據(jù)文件。
假設(shè)我們在名為 “Stata 讀取多張表” 的文件夾下,有一個名為“stata.xlsx”的 Excel 數(shù)據(jù)文件。
假設(shè)我們有 N 個這樣的 Excel 數(shù)據(jù)文件。像這樣:
然后每一個 Excel 文件中有這樣的表格:
每張表的 sheet 名稱是不一樣的,比如第一張叫:stata1;第二張叫 Stata_2;第三張表叫 stATA_+3。每一張表里面的范圍也可能不盡相同。
怎么用 stata 批量讀取呢?一般地,我們會用 import excel 命令讀取 excel 文件,通過 help import excel, 我們可以看到它的基本用法:
clear
set more off
cd c:\users\admin\desktop\Stata讀取多張表\
import excel using stata.xlsx
*讀取 excel 文件,默認讀取第一張表格,結(jié)果如下:
import excel age name using stata.xlsx ,clear
*讀取 excel 文件,讀取第一張表格中 age name 變量,結(jié)果如下:
import excel using stata.xlsx, sheet(stata1) firstrow clear
*讀取 excel 文件,通過sheet 選項讀取名為“stata1”的表格中,通過firstrow 選項把工作表中的第一行當(dāng)成變量名讀入。結(jié)果如下:
import excel using stata.xlsx, sheet(stata1) firstrow cellrange(A1:C5) clear
*讀取excel文件,通過sheet選項讀取名為“stata1”的表格中,通過firstrow選項把工作表中的第一行當(dāng)成變量名讀入,通過cellrange 選下把 A1:C5 范圍的數(shù)據(jù)讀入。結(jié)果如下:
import excel using stata.xlsx , describe
描述 Excel 文件的概況,比如:
我們可以看到,這個 Excel 文件有 3 張表格,還能看見它每張表格的數(shù)據(jù)范圍。
我們在命令窗口輸入:return list 。我們可以看到:
Excel 文件的每一張工作表的情況都被一一儲存到 Macro 里了。這將是我們需要用到的原料。
面對繁瑣重復(fù)的工作,我們首先應(yīng)該想到的是能不能把這項工作程序化,讓程序通過循環(huán)功能幫我們快速完成工作。
于是:
import excel using stata.xlsx, describe
forvalues s =1/`r(N_worksheet)' {
import excel using stata.xlsx, ///
sheet(`r(worksheet_`s')') ///
cellrange(`r(range_`s')') ///
firstrow clear
save newstata`s'.dta, replace
}
clear
forvaluess = 1/`r(N_worksheet)' {
append using newstata`s'.dta
}
save stata_all.dta,replace
我們可以看到 3 張表就合并過來了!
那么怎么把Stata讀取多張表文件夾下的所有 Excel 都讀進呢?有兩種方法:
*把所有文件夾下所有擴展名為 xlsx 的文件名存進 local files 里:
local files: dir '.' file '*.xlsx'
foreach file in `files'{
import excel using '`file'', describe
forvalues s = 1/`r(N_worksheet)' {
import excel using '`file'', ///
sheet(`r(worksheet_`s')') ///
cellrange(`r(range_`s')') ///
firstrow clear
save newstata`s'.dta, replace
}
clear
forvalues s = 1/`r(N_worksheet)' {
append using newstata`s'.dta
}
save '`file'_all.dta',replace
}
ssc install fs
fs *.xlsx
我們可以看到,所有的擴展名為 xlsx的文件名都被保存進來了,那么我們寫個循環(huán)把上面的處理單個 stata.xlsx 的循環(huán)嵌套進來:
fs *.xlsx
foreach file in `r(files)' {
import excel using '`file'', describe
forvalues s = 1/`r(N_worksheet)' {
import excel using '`file'', ///
sheet(`r(worksheet_`s')') ///
cellrange(`r(range_`s')') ///
firstrow clear
save newstata`s'.dta, replace
}
clear
forvalues s = 1/`r(N_worksheet)' {
append using newstata`s'.dta
}
save '`file'_all.dta',replace
}
以上就是今天分享的推文內(nèi)容了。此外,小編還要宣布一個好消息:
stata培訓(xùn)哪家強?的搜尋結(jié)果
1個回答-
提問時間:2017年1月2日
[最佳回答] 親愛的stata愛好者,您好。
爬蟲俱樂部是一個專注解決stata各種疑難雜癥的公眾號,深受大家喜愛。該公眾號即將舉辦線下stata培訓(xùn),技術(shù)大牛親手教你stata,趕緊戳開獨家Stata技術(shù)培訓(xùn),千呼萬喚始出來報名吧!
EmmaWatson 9999……999條好評
接下來報告空氣質(zhì)量
全國空氣質(zhì)量如下
比抽SSR還難
都是難兄難弟,大家都保重
以上就是今天給大家分享的內(nèi)容了,說得好就賞個銅板唄!有錢的捧個錢場,有人的捧個人場~,點贊打賞隨您心意,么么噠~
應(yīng)廣大粉絲要求,爬蟲俱樂部的推文公眾號打賞功能可以開發(fā)票啦,累計打賞超過1000元我們即可給您開具發(fā)票,發(fā)票類別為“咨詢費”。用心做事,只為做您更貼心的小爬蟲。第一批發(fā)票已經(jīng)寄到各位小主的手中,大家快來給小爬蟲打賞呀~
編輯 by梅潔瓷傲?
聯(lián)系客服