stata文本变量的处理

资料来源 :连玉君Stata 初级 研讨班讲义

以文字类型存储的数字之转换 -destring-

//说明:
//*- 从 .txt  文档中读入数值变量之所以会以文字值方式存储,
// *- 主要原因是变量中可能包含了如下特殊符号:
// *- 金额 `$' 、逗号 `,' 、斜线 `/' 、百分比 `%' 、破折号 `-'
shellout "d202.txt"
 des
 sum
//*- 说明:虽然 code  变量由数字组成,但其类型为 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(" -/,%") // 五个字符

纯文字类别变量之转换 -encode-, -rdecode-

use "d202.dta", clear
encode gov, gen(gov1)
labelbook
// *-  缺陷:
//* (1)  没有 -replace-  选项 [-rdecode-]
// * (2)  每次只能转换一个变量,无法实现批量转换 [-rdecodeall-]
// *-rdecode-  命令:附加 replace  选项 (self-reading)
use "d202.dta", clear
rencode gov, replace
label list gov // 另一种方式
// *- 说明:
//* (1)  与该命令功能相似的还有 -sencode-  命令
// * (2)  使用 -rdecodeall-  命令可以同时转换多个变量
//*-encode  命令与 -destring-  的区别
// *-(1)  若数字 “ 误存 ” 为文字型变量,使用 -destring- 命令或 real()  函数
// *-(2)  若观察值均为 “ 文字值 ” ,则需使用 -encode- 或 -rencode- 命令,
// * 这些命令会自动产生【数字 - 文字对应表】

*-2.7.2 将数字转换成文字

//*- 某些情况下,先把数字转换成文字,
// *- 然后利用处理文字的函数进行处理比较方便
//*- 范例 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-  选项,
//* 可以采用外部命令 -rdecode-  或 -sdecode-  代替之。-

文字样本值的分解

use "d202.dta",clear
list
//*- 从 year  变量中提取年份 -split-
split year, parse(-)
order year year1 year2
list
browse
 gen year3 = real(year1) // year1 中全为数值,但以文字型存储
// * destring year1, replace //  另一种方式
// *- 从 date  变量中提取年份、月度和日期 , 并转化为数值
 split date,parse(/) destring ignore("/")
order date date*
br

处理文字的函数 (self-reading)

 help string functions
 help egen
 help egenmore // 外部命令 ,  提供了很多有用的文字和日期处理函数

// 文字函数简介
dis lower("AbCDef")
dis length("price weight length mpg")
dis wordcount("price weight length mpg") // 统计变量的个数
dis proper("mR. joHn a. sMitH") //  规整人名
dis strmatch("C51", "C")
dis strmatch("C51", "C*") //  寻找制造业公司
dis trim(" I love STATA ") //  去掉两端的空格
dis ltrim(" I love STATA ") //  去掉左边的空格
dis rtrim(" I love STATA ") //  去掉右边的空格
dis itrim(" I love STATA ") //  去掉中间的空格
dis itrim(" 内 蒙 古 自治区 ") //  去掉中间的空格,不奏效?
dis subinstr(" 内 蒙 古 自治区 ", " ", "", .)
//*- 释义:
// * subinstr(s, s1,s2, n)
//* s1 “ 将被替换 ” 的字符串
// * s2 “ 替换成 ” 的字符串
// * n 前 n 个出现的目标字符,若为 “.” 则表示全部替换
dis subinstr(" 内 蒙 古 自治区 ", " ", "", 1)
dis subinstr(" 内 蒙 古 自治区 ", " ", "", 3)
//*- 说明:上述函数都可以用于 -generate-  命令来生成新的变量

//例 -1- :上市公司日期、行业代码和所在地的处理
//*-a  待处理的数据
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
//从行业大类 sic 中分离出行业门类
gen sic_men0 = substr(sic,1,1)
encode sic_men0, gen(sic_men)
tab sic_men
label list sic_men
// 从地点中分离出省份和城市
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- :银企关系数据中银行名称的提取

// *- 数据描述
 use "bankname.dta", clear
fre objnm
list in 1/15
//*- 任务:提取出关联银行总部的名称
 keep in 1/15
  gen bank = objnm
  replace bank=" 中国农业银行 " if strmatch(bank,"* 农业银行 *")
 replace bank=" 招商银行 " if strmatch(bank,"* 招商 *")
 replace bank=" 中国银行 " if strmatch(bank,"* 中国银行 *")
 replace bank=" 中国工商银行 " if strmatch(bank,"* 工商 *")
 replace bank=" 兴业银行 " if strmatch(bank,"* 兴业 *")
 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" // 详细说明和范例
help txttool // 文字变量的清理 , Stata Journal 14-4
shellout "$R\txttool.pdf"
help tex_equal // 多个文本的对比
help fren // 修改文件名称
help fdta // 替换文字变量的内容
help tex2col // 文本表格转化为变量 ,  适合提取网页或 PDF 文件中的表格
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,820评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,648评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,324评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,714评论 1 297
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,724评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,328评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,897评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,804评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,345评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,431评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,561评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,238评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,928评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,417评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,528评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,983评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,573评论 2 359

推荐阅读更多精彩内容

  • 今天的主角——z先生,我老公。 两天前的午饭中,z先生,我准备这两天码一篇关于你的文章。 写什么,有什么好写的?写...
    2hz阅读 623评论 5 8
  • 一直觉得和用户接触不够,正好借此机会,设计一套“保持与用户接触”的方案,希望后期能多跟用户保持沟通交流,更加直观的...
    Rr2016阅读 314评论 0 0
  • 1. 闺蜜最近一直被家里催婚,说是因为和现在的男朋友交往了快五年了,该到了结婚的年纪了。 闺蜜其实也不是没有想过,...
    贰鹫阅读 411评论 1 1
  • 今天是我的生日,现在已经凌晨5点了,天还是很黑,我在家里等着天亮。6点了,我妈说觉得我有点感冒,于是摸了摸我的头,...
    1801景智润阅读 153评论 0 0