Stata中文乱码转码顽疾解决方法-批量转换

发布时间:2020-03-05 阅读 7753

Stata 连享会   主页 || 视频 || 推文 || 知乎 || Bilibili 站

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc, ihelp, rdbalance, gitee, installpkg

课程详情 https://gitee.com/lianxh/Course

课程主页 https://gitee.com/lianxh/Course

⛳ Stata 系列推文:

PDF 下载 - 推文合集

于翔 (1026281310@qq.com)
连玉君 (arlionn@163.com)


目录


1. 解决方法

一句话的事儿: 如果你试了各种现有方法都无法解决 Stata 的中文乱码问题,或许可以试一下如下命令 (真正的命令只有最后一行):

特别提示: 转码有风险!转码前务必备份你的原始文件,确认转码无误后再考虑删除原始文件。

. clear         // 转码前务必先清空内存,否则会提示错误信息
. cd "D:\data"  // 待转换数据所在文件夹, 请务必事先备份一份数据

*-转码命令 1:转换当前工作路径下的所有文件
. unicode retranslate *, invalid(ignore) transutf8 nodata replace

2021/8/5 9:45 补充 (by 连玉君)

扩展 1:批量转换当前文件夹及所有子孙文件夹中的文件

思路: 利用连玉君老师编写的 ua 前缀命令实现对所有「子文件夹」的遍历,以便实现深层转码。

. ssc install ua  // 下载批量操作命令

*-转码命令 2:遍历所有子文件夹
. ua: unicode retranslate *, invalid(ignore) transutf8 nodata replace

扩展 2:对 .tex,.md 等类型的文档进行转码

思路:

  • Step 1:更改文件后缀。renfiles 命令把 .tex.md 类型的文件的后缀修改为 Stata 格式的文件的后缀,比如 .ado.do.sthlp 格式等;
  • Step 2:转码ua: unicode ... 转码;
  • Step 3:恢复文件后缀。Step 1 进行反向操作。

提示:

  • 上述步骤中的「Step 1」只是为了能够借助 Stata 来实现转码。因此,若你的目标文件夹中包含了 .ado.do 文档,请不要再选择这两类后缀。基本原则是:所选的 Stata 文档后缀与目标文件夹下的所有文件后缀都不同。
  • 备选后缀名:.ado, .do, .mata, .txt, .csv, .sthlp, .class, .dlg, .idlg, .ihlp, .smcl, .stbcal。这些后缀名都可以被 unicode 转码,参见 help unicode translate 文档中的说明
  • 因此,建议选择 .ihlp.idlg 作为中转后缀名。
ssc install renfiles  // 下载外部命令

cd "D:\data"  // 设定目标文件路径

*-1 把 .tex 文件转换为 .ado 文件
local AA ".tex"
local BB ".ihlp"
ua: renfiles, subs(*) insign(`AA') outsign(`BB') erase

*-2 批量转码为 UTF-8
ua: unicode retranslate *, invalid(ignore) transutf8 nodata replace

*-3 把 .ado 文件转换为 .tex 文件
ua: renfiles, subs(*) insign(`BB') outsign(`AA') erase

*-4 删除 Stata 转码产生的备份文件夹 (可选)
*   使用 DOS 命令 rd
ua: !rd /s/q bak.stunicode


2. 详细介绍

下面是详细介绍 (如果你的问题已经解决,就不用看了)

Stata 中文转码问题很难有一个让所有人满意的通用解法,对于我这样的 Stata 小白用户,一般是采取 case by case 的原则,以下是我最近处理 CGSS 数据过程中遇到的中文乱码问题和解决方法。在「Stata 学习-连享会」QQ 群中 (QQ 号:225012362) 讨论后,连老师鼓励我把处理过程记录下来分享给大家,于是形成了这篇小文。

本文使用的版本是 Stata15,其中,CGSS 数据源于经管之家。

按照 Stata 官方的介绍,我们通常采用如下命令来转换 Stata 13 以前生成的文件:

clear //转码的时候数据不能打开
cd "D:\data" //设置工作路径, 填入存放待转换数据的文件路径

*-开始转码
unicode analyze *//任何文件类型
unicode encoding set gb18030
unicode translate *

上述命令只能转换当前工作路径下的文件,对于子孙文件夹下的文件就无能为力了。 此时可以使用连玉君老师之前编写的 ua 以及 uall (项目地址:https://gitee.com/arlionn/uall ),一次性转换当前工作路径下的所有文件夹及子孙文件夹中的文件。

可以看到,并没有完全转码。Stata 提示 File not translated because it contains unconvertable characters

变量标签也是乱码:

此时,变量标签 label 乱码问题并没有解决,根据 Stata 的提示信息,把最后一行改成:

unicode retranslate *, invalid

此时,我们附加了 invalid 选项,转码结果如下

完成上述操作后,大部分汉字乱码以及显示正常了,还是有个别带中文的数据产生乱码,如图

这时,Stata 会推荐如下命令:

unicode translate   "CGSS2012.dta", transutf8
unicode retranslate "CGSS2012.dta", transutf8

我试过,但没什么用。

最终,我采用如下命令顺利解决了问题:

*-路径设定
. clear  //执行下面的命令之前务必先清空内存,否则会提示错误信息
. cd "D:\data"  //存放待转换数据的路径, 请务必事先备份一份数据

*-转码

. unicode retranslate *, invalid(ignore) transutf8 nodata replace

最终效果如下图所示:

结语

导致转码失败或者不完全的原因有很多,如果读者没时间了解 Stata 的深层架构,希望本文可以作为一种即用的方法惠及更多人。

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2 小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata 连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,400+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxh 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh