Stata连享会 主页 || 视频 || 推文 || 知乎 || Bilibili 站
温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc
,ihelp
,rdbalance
,gitee
,installpkg
⛳ Stata 系列推文:
王耀辉 (山东师范大学),wangyaohuink@126.com
初 虹 (山东财经大学),ch2099058972@163.com
目录
中国劳动力动态调查 (CLDS) 数据库的 Stata 数据编码格式相对较老。如果用 Stata14 及以上版本打开的话,会出现中文乱码的情况。但是,在使用常规的转码方法进行转码时,会出现闪退的情况。网上的解决方案,要么需要使用复杂的循环语句,要么需要使用外部命令。即使这样,这些方案也都不能很好的解决问题。
通过观察,我们发现闪退的原因是,数据中的一些数值标签有乱码。这些乱码无法通过命令解决,只能手工修改。本文的解决方案如下所示:
标签是对数据中的元素进行的文字性说明。在 Stata 中,标签有数据标签、变量标签和数值标签等三种形式。具体来看:
数据标签:对整个数据的简单说明。例如,在调用 auto 数据时,括号中内容 "1978 Automobile Data" 为该数据的标签。
. sysuse auto,clear
(1978 automobile data)
变量标签:对变量的进一步说明。例如,变量 rep78 的标签是 "Repair Record 1978",即二手车在 1978 年的维修记录。
. des
Observations: 74 1978 automobile data
Variables: 12 13 Apr 2020 17:45
(_dta has notes)
--------------------------------------------------------------------
Variable Storage Display Value
name type format label Variable label
--------------------------------------------------------------------
make str18 %-18s Make and model
price int %8.0gc Price
mpg int %8.0g Mileage (mpg)
rep78 int %8.0g Repair record 1978
headroom float %6.1f Headroom (in.)
trunk int %8.0g Trunk space (cu. ft.)
weight int %8.0gc Weight (lbs.)
length int %8.0g Length (in.)
turn int %8.0g Turn circle (ft.)
displacement int %8.0g Displacement (cu. in.)
gear_ratio float %6.2f Gear ratio
foreign byte %8.0g origin Car origin
-------------------------------------------------------------------
Sorted by: foreign
数值标签:对变量数值的文字说明,一般用在分类变量上。例如,变量 foreign 有两个值 0 和 1。其中 0 的标签是 Domestic,而 1 的标签是 Foreign。数值标签都是蓝色的,双击标签才能看到被其覆盖的数值。
. label list
origin:
0 Domestic
1 Foreign
Stata 中对标签进行操作的命令是 label
。例如:
. label data "1978年二手车数据" // 修改数据标签
. label variable make "品牌和型号" // 修改变量标签
. label define df 0 "国产" 1 "进口" // 设置一个数值标签,命名为 df
. label value foreign df // 将数值标签 df 映射给变量 foreign
以 2016 年的社区数据为例,为了找到是哪些标签出了问题,我们需要先将所有的数值标签保存下来。
use clds2016community, clear // 导入数据
label save using community_2016.do, replace // 将数值标签保存到一个 do 文档里
将 community_2016.do 文档拖入 Stata 的 do 文档编辑器中。此时会弹出一个框提示你当前文件并不是使用 UTF-8 编码,并让你选择编码。这里选择 Chinese GB(18030) 即可。
打开该文档后可以看到,大部分标签都能正确显示。例如标签 C105 是这样设定的:
label define C105 1 `"草房"', modify
label define C105 2 `"土木房"', modify
label define C105 3 `"砖混结构"', modify
label define C105 4 `"窑洞"', modify
label define C105 5 `"蒙古包"', modify
label define C105 99 `"其他(请注明)"', modify
但是,标签 i907 和 i80 却不能正确显示,有很多乱码:
label define i907 1 `"1 土葬%XB92 火葬直接安3 火葬将骨灰盒%XD74 其他请注明%XA3"', modify
label define i907 2 `"2 火葬直接安3 火葬将骨灰盒%XD74 其他请注明%XA3"', modify
label define i907 3 `"3 火葬将骨灰盒%XD74 其他请注明%XA3"', modify
label define i907 4 `"4 其他请注明%XA3"', modify
label define i80 1 `"1 汉%XD72 壮%XD73 满%XD74 回%XD75 苗%XD76 维吾%XB67 土家8 彝%XD79
蒙古10 藏%XD711 布依12 侗%XD713 瑶%XD714 朝鲜15 白%XD716 哈尼17 哈萨%XBF18 黎%XD719 傣%XD720
畲%XD721 僳僳22 仡佬23 东乡24 拉祜25 水%XD726 佤%XD727 纳西28 羌%XD729 土%XD730 仫佬31 锡伯32
柯尔克33 达斡%XB634 景颇35 毛南36 撒拉37 布朗38 塔吉%XBF39 阿昌40 普米41 鄂温%XBF42 怒%XD743
京%XD744 基诺45 德昂46 保安47 俄罗%XCB48 裕固49 乌孜别50 门巴51 鄂伦%XB452 独龙53 塔塔%XB654
赫哲55 高山56 珞巴99 其%XCB"', modify
label define i80 2 `"2 壮%XD73 满%XD74 回%XD75 苗%XD76 维吾%XB67 土家8 彝%XD79 蒙古10
藏%XD711 布依12 侗%XD713 瑶%XD714 朝鲜15 白%XD716 哈尼17 哈萨%XBF18 黎%XD719 傣%XD720
畲%XD721 僳僳22 仡佬23 东乡24 拉祜25 水%XD726 佤%XD727 纳西28 羌%XD729 土%XD730 仫佬31
锡伯32 柯尔克33 达斡%XB634 景颇35 毛南36 撒拉37 布朗38 塔吉%XBF39 阿昌40 普米41 鄂温%XBF42
怒%XD743 京%XD744 基诺45 德昂46 保安47 俄罗%XCB48 裕固49 乌孜别50 门巴51 鄂伦%XB452 独龙53
塔塔%XB654 赫哲55 高山56 珞巴99 其%XCB"', modify
......
label define i80 56 `"56 珞巴99 其%XCB"', modify
label define i80 99 `"99 其%XCB"', modify
这些乱码不太容易通过命令解决,只能先删掉这些有乱码的标签:
label drop i80 i907 // 删去有乱码的数值标签
save clds2016community_transcode,replace // 将删去问题标签的数据保存
然后再进行转码就不会发生闪退 (如果还闪退,一定是没把乱码标签删干净):
clear
unicode encoding set gb18030
unicode translate clds2016community_transcode.dta, transutf8
手动调整乱码:
use clds2016community_transcode,clear
label define i907 1 `"土葬(棺材)"', modify
label define i907 2 `"火葬(直接安葬骨灰盒)"', modify
label define i907 3 `"火葬(将骨灰盒装入棺材安葬)"', modify
label define i907 4 `"其他"', modify
label define i80 1 `"汉族"', modify
label define i80 2 `"壮族"', modify
......
label define i80 56 `"珞巴族"', modify
label define i80 99 `"其他"', modify
将调整好的标签映射给相关变量:
label value C7_2 i80
label value C105_2_w16 i907
save, replace
由于CLDS中的变量和标签非常多,查找具体哪些变量使用了这两个标签可能比较困难。此时可以进行如下操作:
use clds2016community, clear // 导入原始数据
describe, replace // 生成一个数据描述文件
打开 Data Editor 后会发现,新生成的文件中包含了所有变量的相关信息。其中 name 是变量的名字,vallab 是数值标签。我们可以很方便的查找变量对应的标签名字。
Note:产生如下推文列表的 Stata 命令为:
lianxh 乱码 编码, m
安装最新版lianxh
命令:
ssc install lianxh, replace
免费公开课
最新课程-直播课
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 文本分析、机器学习、效率专题、生存分析等 | |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
⛳ 课程主页
⛳ 课程主页
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会-常见问题解答:
✨ https://gitee.com/lianxh/Course/wikis
New!
lianxh
和songbl
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh