資料來源 :連玉君Stata 初級 研討班講義
以文字類型存儲的數(shù)字之轉(zhuǎn)換 -destring-
//說明:
//*- 從 .txt 文檔中讀入數(shù)值變量之所以會以文字值方式存儲踢星,
// *- 主要原因是變量中可能包含了如下特殊符號:
// *- 金額 `$' 联逻、逗號 `,' 驶沼、斜線 `/' 雷绢、百分比 `%' 、破折號 `-'
shellout "d202.txt"
des
sum
//*- 說明:雖然 code 變量由數(shù)字組成课梳,但其類型為 str7, 即為文字型變量
// * leverage, size, date 都存在類似的問題
// *- 原理
use "d202.dta", clear
destring code, gen(code1) ignore(" ")
destring leverage, gen(lev) percent
//*- 整體處理方案
use "d202.dta", clear
destring code year date size lev, replace ignore(" -/,%") // 五個字符
純文字類別變量之轉(zhuǎn)換 -encode-, -rdecode-
use "d202.dta", clear
encode gov, gen(gov1)
labelbook
// *- 缺陷:
//* (1) 沒有 -replace- 選項(xiàng) [-rdecode-]
// * (2) 每次只能轉(zhuǎn)換一個變量距辆,無法實(shí)現(xiàn)批量轉(zhuǎn)換 [-rdecodeall-]
// *-rdecode- 命令:附加 replace 選項(xiàng) (self-reading)
use "d202.dta", clear
rencode gov, replace
label list gov // 另一種方式
// *- 說明:
//* (1) 與該命令功能相似的還有 -sencode- 命令
// * (2) 使用 -rdecodeall- 命令可以同時轉(zhuǎn)換多個變量
//*-encode 命令與 -destring- 的區(qū)別
// *-(1) 若數(shù)字 “ 誤存 ” 為文字型變量余佃,使用 -destring- 命令或 real() 函數(shù)
// *-(2) 若觀察值均為 “ 文字值 ” ,則需使用 -encode- 或 -rencode- 命令跨算,
// * 這些命令會自動產(chǎn)生【數(shù)字 - 文字對應(yīng)表】
*-2.7.2 將數(shù)字轉(zhuǎn)換成文字
//*- 某些情況下爆土,先把數(shù)字轉(zhuǎn)換成文字,
// *- 然后利用處理文字的函數(shù)進(jìn)行處理比較方便
//*- 范例 1 :年月日的組合
use "tostring.dta", clear
gen date = year + "-" + month + "-" + day
gen edate = date(date, "YMD")
format edate %td
browse
//*- 范例 2 :年月日的分離
use "tostring2.dta", clear
browse
tostring date_pub, gen(date1)
gen year = substr(date1, 1, 4)
gen month = substr(date1, 5, 2)
gen day = substr(date1, 7, 2)
browse
destring year month day, replace
browse
// *- 說明:
//* -decode- 命令的缺陷同樣在于沒有 -replace- 選項(xiàng)诸蚕,
//* 可以采用外部命令 -rdecode- 或 -sdecode- 代替之步势。-
文字樣本值的分解
use "d202.dta",clear
list
//*- 從 year 變量中提取年份 -split-
split year, parse(-)
order year year1 year2
list
browse
gen year3 = real(year1) // year1 中全為數(shù)值,但以文字型存儲
// * destring year1, replace // 另一種方式
// *- 從 date 變量中提取年份挫望、月度和日期 , 并轉(zhuǎn)化為數(shù)值
split date,parse(/) destring ignore("/")
order date date*
br
處理文字的函數(shù) (self-reading)
help string functions
help egen
help egenmore // 外部命令 , 提供了很多有用的文字和日期處理函數(shù)
// 文字函數(shù)簡介
dis lower("AbCDef")
dis length("price weight length mpg")
dis wordcount("price weight length mpg") // 統(tǒng)計(jì)變量的個數(shù)
dis proper("mR. joHn a. sMitH") // 規(guī)整人名
dis strmatch("C51", "C")
dis strmatch("C51", "C*") // 尋找制造業(yè)公司
dis trim(" I love STATA ") // 去掉兩端的空格
dis ltrim(" I love STATA ") // 去掉左邊的空格
dis rtrim(" I love STATA ") // 去掉右邊的空格
dis itrim(" I love STATA ") // 去掉中間的空格
dis itrim(" 內(nèi) 蒙 古 自治區(qū) ") // 去掉中間的空格立润,不奏效狂窑?
dis subinstr(" 內(nèi) 蒙 古 自治區(qū) ", " ", "", .)
//*- 釋義:
// * subinstr(s, s1,s2, n)
//* s1 “ 將被替換 ” 的字符串
// * s2 “ 替換成 ” 的字符串
// * n 前 n 個出現(xiàn)的目標(biāo)字符媳板,若為 “.” 則表示全部替換
dis subinstr(" 內(nèi) 蒙 古 自治區(qū) ", " ", "", 1)
dis subinstr(" 內(nèi) 蒙 古 自治區(qū) ", " ", "", 3)
//*- 說明:上述函數(shù)都可以用于 -generate- 命令來生成新的變量
//例 -1- :上市公司日期、行業(yè)代碼和所在地的處理
//*-a 待處理的數(shù)據(jù)
shellout "d203.txt"
insheet date sic location using "d203.txt", clear
save "d203.dta", replace
browse
// *-b 從 date 中分離出年泉哈、月蛉幸、日
gen year = int(date/10000)
tostring date, gen(date1)
gen year1 = substr(date1,1,4)
gen year2 = real(year1)
gen month = substr(date1,5,2)
gen month1= real(month)
gen day = substr(date1,7,2)
gen day1 = real(day)
browse
//*- 更為簡潔的命令
use "d203.dta", clear
gen sdate = string(date,"%10.0g") // help string()
gen year = real(substr(string(date,"%10.0g"), 1, 4))
gen month = real(substr(sdate, 5, 2))
gen day = real(substr(sdate, 7, 2))
browse
drop sdate
//從行業(yè)大類 sic 中分離出行業(yè)門類
gen sic_men0 = substr(sic,1,1)
encode sic_men0, gen(sic_men)
tab sic_men
label list sic_men
// 從地點(diǎn)中分離出省份和城市
use "d203.dta",clear
list
gen province1 = substr(location, 1,2)
gen city1 = substr(location, 4,4)
list location province1 city1
gen province2 = word(location, 1)
gen city2 = word(location, 2)
list location province1 city1 province2 city2
//*- 注意:每個英文字母占一位,但每個中文字符占兩位
//例 -2- :銀企關(guān)系數(shù)據(jù)中銀行名稱的提取
// *- 數(shù)據(jù)描述
use "bankname.dta", clear
fre objnm
list in 1/15
//*- 任務(wù):提取出關(guān)聯(lián)銀行總部的名稱
keep in 1/15
gen bank = objnm
replace bank=" 中國農(nóng)業(yè)銀行 " if strmatch(bank,"* 農(nóng)業(yè)銀行 *")
replace bank=" 招商銀行 " if strmatch(bank,"* 招商 *")
replace bank=" 中國銀行 " if strmatch(bank,"* 中國銀行 *")
replace bank=" 中國工商銀行 " if strmatch(bank,"* 工商 *")
replace bank=" 興業(yè)銀行 " if strmatch(bank,"* 興業(yè) *")
replace bank=" 光大銀行 " if strmatch(bank,"* 光大 *")
replace bank=" 交通銀行 " if strmatch(bank,"* 交通 *")
replace bank=" 北京銀行 " if strmatch(bank,"* 北京 *")
compress
browse
文本分析的一些命令
help screening // 文字變量的清理 , Stata Journal 10-3
shellout "$R\screening.pdf" // 詳細(xì)說明和范例
help txttool // 文字變量的清理 , Stata Journal 14-4
shellout "$R\txttool.pdf"
help tex_equal // 多個文本的對比
help fren // 修改文件名稱
help fdta // 替換文字變量的內(nèi)容
help tex2col // 文本表格轉(zhuǎn)化為變量 , 適合提取網(wǎng)頁或 PDF 文件中的表格