Stata:CLDS数据转码闪退问题解决方案

文摘   教育   2024-09-07 22:03   山西  

👇 连享会 · 推文导航 | www.lianxh.cn

🍓 课程推荐:2024 空间计量专题
主讲老师:范巧 (兰州大学)
课程时间:2024 年 10 月 2-4 日 (三天)
课程咨询:王老师 18903405450(微信)

 课程特色 · 2024空间计量

👉 一、从“零基础”到“高水平”的课程设计

  • 兼顾基础知识、主流模型与前沿模型
  • 既考虑软件安装、程序编写以及空间权重矩阵设计等 基础知识 讲授,更强调时空面板地理加权回归模型、贝叶斯空间计量模型、矩阵指数模型、空间计量交互模型与空间面板似不相关回归模型等 前沿模型 的传授。

👉 二、“保姆级”的空间计量代码

  • 编写与校准所有模型的MATLAB代码,简化实操环节
  • 模型的估计与检验等 仅按照提供的Excel数据版式 搜集与整理原始数据,即可一次性出结果并作图

👉 三、“最多上新” 的内容体系

  • 新增 矩阵指数模型、短面板空间似不相关模型、空间计量交互模型、贝叶斯空间计量模型等
  • 新增 前沿应用案例,包括空间计量与索洛余值法、随机前沿分析与数据包络分析等的互嵌研究,阐释基于空间计量的产业空间结构优化评价方法。
  • 新增 Dagum空间基尼系数、核密度估计、空间马尔科夫链与空间收敛性等内容,阐释现实研究中对空间收敛性的应用“谬误”。

王耀辉 (山东师范大学),wangyaohuink@126.com
初   虹 (山东财经大学),ch2099058972@163.com


目录

  • 1. 问题描述

  • 2. 标签概述

  • 3. 转码过程

  • 4. 相关推文



温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:

1. 问题描述

中国劳动力动态调查 (CLDS) 数据库的 Stata 数据编码格式相对较老。如果用 Stata14 及以上版本打开的话,会出现中文乱码的情况。但是,在使用常规的转码方法进行转码时,会出现闪退的情况。网上的解决方案,要么需要使用复杂的循环语句,要么需要使用外部命令。即使这样,这些方案也都不能很好的解决问题。

通过观察,我们发现闪退的原因是,数据中的一些数值标签有乱码。这些乱码无法通过命令解决,只能手工修改。本文的解决方案如下所示:

2. 标签概述

标签是对数据中的元素进行的文字性说明。在 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

3. 转码过程

以 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 是数值标签。我们可以很方便的查找变量对应的标签名字。

4. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 乱码 编码, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

  • 专题:Stata入门
    • Stata15-Unicode:一次性转码解决中文乱码问题
  • 专题:数据处理
    • Stata数据处理:快速合并与编码-encodefrom
    • Stata:产生唯一数据编码的三种方法
    • Stata中文乱码转码顽疾解决方法-批量转换
    • 赶尽杀绝:Stata中文乱码之转码
  • 专题:Stata程序
    • 字符编码问题三个不可见的字符(0xEF-0xBB-0xBF,即BOM)
  • 专题:Python-R-Matlab
    • Python 调用 API 进行逆地理编码
    • Python 调用 API 进行地理编码



🍓 课程推荐:2024 空间计量专题
主讲老师:范巧 (兰州大学)
课程时间:2024 年 10 月 2-4 日 (三天)
课程咨询:王老师 18903405450(微信)


New! Stata 搜索神器:lianxh 和 songbl  GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
  . ssc install lianxh
  . ssc install songbl
👉  使用:
  . lianxh DID 倍分法
  . songbl all



🍏 关于我们

  • 连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 直通车: 👉【百度一下: 连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。


连享会
连玉君老师团队分享,主页:lianxh.cn。白话计量,代码实操;学术路上,与君同行。
 最新文章