Stata15-Unicode:一次性转码解决中文乱码问题

发布时间:2020-10-07 阅读 7299

Stata 连享会   主页 || 视频 || 推文

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

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

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

作者:连玉君 (中山大学)
E-Mail: arlionn@163.com


目录


ua 命令使用说明

ua 命令

适用于 stata15 用户。可以一次性对当前工作路径以及所有子文件夹中的文件进行转码(unicode),以保证中文字符可以正常显示。

安装

  • 方法1: 2018/1/6 更新: ua 命令已经被 SSC (help ssc) 收录。 在 Stata 命令窗口中输入如下命令即可自动下载安装最新版的 ua 命令:
ssc install ua, replace
  • 方法2: - 到这里 - 下载 ua.adoua.hlp,放置于 D:\stata15\ado\base\uD:\stata15\ado\plus\u 文件夹中。(下载地址:https://gitee.com/arlionn/ua)

使用

  • 在 Stata 命令窗口中输入 help ua,查看命令介绍和 Stata 范例。参照范例使用即可。

Stata 范例

  * 改变当前工作路径(进入这个文件夹)
  * change current working directory (CWD)
    . cd "D:\stata15\ado\personal\mypaper"

  * 对当前文件夹以及所有子文件夹中的所有文件进行转码
  * Unicode all files (.do, .ado, .dta, .hlp, etc.) in CWD and files in sub-directories
    . ua: unicode encoding set gb18030
    . ua: unicode translate *

你如何用 ?

复制如下代码,每次使用时,选中如下三行,按快捷键 Ctrl+D 即可完成转码。你只需修改需要转码的文件路径即可:

. cd "D:\stata15\ado\personal\mypaper"   // 请自行修改路径
. ua: unicode encoding set gb18030
. ua: unicode translate *

     

注:后续内容与 ua 命令的使用没有直接关系,只是记录了程序的撰写过程。

     

故事背景(程序撰写过程)

我昨天下午 5 点有个需求:我是从 Stata 13 直接跳到 15 的。可是,Stata 15 的中文编码方案全变了,导致 do-file 和数据文件中的中文字符全是乱码。Stata 提供了一组 unicode 开头的命令,可以很方便地进行转码。但只能一个文件夹一个文件夹地转。我用了 14 年的 stata,有成百上千个文件夹需要转码! 搜索了半天无果。只好求助涛哥 (李春涛是也)。

涛哥的第一反应是需要编程。我们的共识是需要遍历所有文件夹,记录下来,然后用循环语句进入每一个文件夹,进行转码。

我以为他会停几天再开始做这个工作。又不好催促他,以便搭他的便车。只好自己开始弄。或许他也不好意思搭我的便车,哈哈。

没想到今天晚上写好所有程序和说明文档后分享给他时,他居然也完工了!

看来,有好奇心的人都是一样的亟不可待!

背靠背工作记录

有想法:2017/12/18 17:05

同时完工:2017/12/19 22:28

我们的思路有何差别

整体思路:遍历当前文件夹下的所有子文件夹,对每个文件夹进行转码。

问题的关键:如何遍历所有的子文件夹,并记录这些文件夹的名称。

涛哥的思路:使用如下 dos 命令遍历当前工作文件夹下的所有子文件夹,并将他们存入一个文本文件 output.txt,随后使用infix命令读入内存:

!dir /B /S /ad >> output.txt
infix strL v 1-2000 using "output.txt"

最终,涛哥的程序长这样:

君哥的思路:使用外部命令rcd实现上述功能,所有子文件夹名称均以返回值的形式存储于内存中。执行过程如下: 然后就可以写一个循环逐个文件夹进行转码了: 最终,君哥的程序长这样:

原始程序和使用方法

涛哥的程序

涛哥的程序尚未封装成 .ado 文件,但用起来到也方便。直接复制如下代码到一个 Do-file 中,使用 cd 命令进入需要转码的文件夹,然后选中如下命令,执行即可(快捷键是 Ctrl+D):

cd "D:\stata15\ado\personal\mypaper" //自行修改
!dir /B /S /ad >> output.txt
clear
unicode analyze output.txt
unicode encoding set gb18030
unicode translate  "output.txt", transutf8
unicode erasebackups, badidea
infix strL v 1-2000 using "output.txt"
levelsof v ,local(urllist)
! del output.txt
clear 
unicode translate * , transutf8
foreach c of local urllist{
	clear
	cd `"`c'"'
	unicode encoding set gb18030
	cap unicode translate * , transutf8
}

君哥的程序

已经封装成 .ado 文件,并配有说明文档。请到 Stata连享会-码云-ua项目中(链接为:https://gitee.com/arlionn/ua )下载 ua.adoua.hlp 文件,放置于 D:\stata15\ado\base\uD:\stata15\ado\plus\u 文件夹中。然后在 Stata 命令窗口中输入 help ua,查看命令介绍和 Stata 范例。参照范例使用即可。

Stata 范例

* 程序下载地址和使用说明:
* https://gitee.com/arlionn/ua
* 进入需要转码的文件夹
  . cd D:\stata15\ado\personal\mypaper

* 对当前文件夹及子文件夹中的所有 .dta 文件转码
  . ua: unicode encoding set gb18030
  . ua: unicode translate *.dta

* 对所有类型的文件转码
  . ua: unicode analyze *
  . ua: unicode encoding set gb18030
  . ua: unicode translate *

结语

生活如此美好!因为有你有我!

相关课程

连享会-直播课 上线了!
http://lianxh.duanshu.com

免费公开课:


课程一览

支持回看,所有课程可以随时购买观看。

专题 嘉宾 直播/回看视频
最新专题 DSGE, 因果推断, 空间计量等
Stata数据清洗 游万海 直播, 2 小时,已上线
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]

Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。


关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。直播间 有很多视频课程,可以随时观看。
  • 连享会-主页知乎专栏,300+ 推文,实证分析不再抓狂。
  • 公众号推文分类: 计量专题 | 分类推文 | 资源工具。推文分成 内生性 | 空间计量 | 时序面板 | 结果输出 | 交乘调节 五类,主流方法介绍一目了然:DID, RDD, IV, GMM, FE, Probit 等。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会主页  lianxh.cn
连享会主页 lianxh.cn

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

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

✏ 连享会学习群-常见问题解答汇总:
https://gitee.com/arlionn/WD