赶尽杀绝:Stata中文乱码之转码

本文介绍了如何解决Stata中的中文乱码问题,特别是当官方命令和扩展命令无法完全解决问题时。文章提供了一个逐步的解决方案,包括转码单个.dta文件、整个文件夹及三层嵌套文件夹中的.dta文件。作者对爬虫俱乐部的代码进行了改进,支持自动转码「数字-文字对应表」中的中文标签,并实现了批量转码功能。
摘要由CSDN通过智能技术生成

作者:王美庭 (中南民族大学经济学院)

连享会 - 与君分享 lianxh.cn

本文的目的: 当 Stata 官方提供的 unicode * 命令组和 连老师提供的 ua 命令执行完后仍然存在乱码时,可以试试本文的解决方案。本文的主要代码来自于「爬虫俱乐部 精通Stata之数据整理」,在其基础上进行了一些改进 (详情参见本文第三部分),主要包括两个方面:其一,可以对「数字-文字对应表」中的中文乱码进行自动转码。其二,支持批量多文件(夹)转码。


1. 问题阐述

时至今日,Stata 已经进入 16 时代代,各项功能日益完善。然而,对于广大中文老用户而言,仍然存在一个历史性问题——转码

这一切来源于 Stata 14 跨时代地全面启用了适用性更广的 UTF-8 编码格式,从而保证我们的 dofile.dta, .hlp 等文件中可以支持各种语言和字符,非英语用户再也不用一定使用英语字母作为变量名了。

历史遗留问题在于,对于国内用户,使用 Stata 13 及早期版本保存的 do 文件和 .dta 文件一般为 gb2312gbkgb18030 编码,而 Stata 14 及高级版本采用的是 UTF-8 编码。就像英文单词 he,在英语里的意思是他、男性,男子;雄性动物,而在汉语拼音中,可能被认为是和、何、禾等,所以同样的文字,在不同的编码下,将有不同的含义。于是,国内用户早期版本 Stata 保存下来的 do 文件和 .dta 文件在高级版本 Stata 下那些非英文字符出现乱码也是自然而然的事。

Stata 官方和用户们都给出了一些解决方案。比如,针对国内用户,官方提供了 unicode encoding set gb18030unicode translate * 命令组,以便实现转码 (从编码 gb18030 转码至 UTF-8 ) 命令,以及连玉君老师编写的 ua 命令对其的扩展(这里要注意的是,由于 gb18030 编码包含 gbk ,而 gbk 又包括 gb2312,所以针对国内用户,转码前设置编码 gb18030 即可)。

然而,当文件中包含了不可转换字符,则会导致以上命令无法奏效。当然,我们也可以加上 invalid 选项以保证上述命令被强制执行,但这样很可能会导致数据的部分位置被修改(而我们又不知道哪里被修改了),从而对后期的数据分析产生影响。

2. 解决方案

对于以上问题,在这里我们是怎么处理的呢?

对于 do 文件,处理还是比较简单的,我们在后期版本中打开时软件会自动提示选择何种编码打开,此时我们国内一般选择 gb18030 即可。本文重点在于解决 .dta 文件的转码。我们知道,.dta 文件的乱码一般会出现在数据标签、变量名、变量内容、变量标签、值标签。因此,对于每一个 .dta 文件,我们只需对这些部分利用相关的转码函数进行转码即可。这里看似与官方命令重复了,其实重要区别是如果 .dta 存在不可转换的字符,利用本文的做法,你就能发现不可转换的字符存在何处,然后通过本身对于数据的现有信息,手动更正即可(而对于官方命令,你不知道这里无法转换的字符在何处)。

我们最终的目的在于对于当前文件夹、子文件夹、子子文件夹中的所有 .dta 文件进行转码(由 gb18030 转至 UTF-8 ),如果刚开始就按照这个思维去写程序,这是比较困难的。我们先从单个文件入手,再进入单个文件夹,最后再对三层嵌套文件夹进行操作。

连享会计量方法专题……

2.1 转码程序——单个 .dta 文件

使用说明

这里的目的在于将单个 .dta 文件由 gb18030 编码转换至 UTF-8 编码。前面已经说过,.dta 文件可能出现乱码的地方有:数据标签、变量名、变量内容、变量标签、值标签。因此我们用 Stata 对这些可能出现乱码的地方依次进行转码,最后再将转码后的数据替换原来的数据,以防万一,以下程序还备份了原来的 .dta 文件。

具体的注意事项如下:

  1. 在当前目录下生成了 ba
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值