Stata如何一键快速将数据转码为utf-8格式?

Stata 14开始支持Unicode,Stata 13及更早版本的数据如果含有EASCII(Extended ASCII)码(如中文),之后的Stata无法正确显示(变量值、标签和注释),需要进行转码,包括dta文件和do文件。

西安交通大学实证社会科学研究所的何凌锋([email protected])开发了Stata社区命令QTransUni,快速转化Stata 13及更早版本的文件编码到utf-8。

安装QTransUni的Stata命令如下:


net from https://hedaozi.com/resource/program/Stata
net describe QTransUni
net install QTransUni

查看帮助的的Stata命令如下:


* 英文版帮助
help QTransUni
* 中文版帮助
help QTransUniCN
* 查看源代码
viewsource QTransUni.ado

QTransUni共有5个选项:
path(string):必选,文件存放的目录。
filespec(string):必选,文件的类别。
baseEncoding(string):可选,源文件的编码,默认值为GB18030。
clear:可选,用于清空内存。如果需要添加该参数,最好先保存内存数据。
invalid:可选,当有少量字符无法转码时可以添加该选项。

如果要对某个文件夹内的dta数据转码,只需要:


QTransUni, path(Your/Path/To/Files) filespec(*.dta)

如果有少量字符无法转码,可以:


QTransUni, path(Your/Path/To/Files) filespec(*.dta) invalid

如想将基于Stata 13.1 的wirter数据库转码为utf-8格式,有以下两步。
第一步,下载并生成演示数据,Stata代码如下:

*在D盘新建名为Lian的文件夹
mkdir d:/Lian
*下载演示数据库,并重命名,以生成多个数据库,留空则为原数据库名称,replace表示覆盖已有同名数据库
copy http://ds.epiman.cn/uploads/2022/07/writer.dta  D:/Lian/
copy http://ds.epiman.cn/uploads/2022/07/writer.dta  D:/Lian/writer1.dta
copy http://ds.epiman.cn/uploads/2022/07/writer.dta  D:/Lian/writer2.dta
copy http://ds.epiman.cn/uploads/2022/07/writer.dta  D:/Lian/writer3.dta
copy http://ds.epiman.cn/uploads/2022/07/writer.dta  D:/Lian/writer4.dta
copy http://ds.epiman.cn/uploads/2022/07/writer.dta  D:/Lian/writer5.dta,replace
*预览乱码的效果
use D:/Lian/writer.dta,clear
list

第二步,清空Stata内存,开始转码,Stata代码如下:

clear
*单个数据库转码
QTransUni, path(D:/Lian) filespec(writer.dta)

大功告成,可以读取数据看一下转码后效果,Stata代码如下:


use D:/Lian/writer.dta,clear
list

如果有少量字符无法转码,Stata代码如下:


QTransUni, path(D:/Lian) filespec(writer.dta) invalid

Stata的do文件转码类似,以writer.do为例,Stata代码如下:

*读取演示do文件
copy http://ds.epiman.cn/uploads/2022/07/wirter.do  D:/Lian/writer.do,replace
*打开演示do文件,预览乱码的效果,会智能提示是否转码UTF-8,点击转码UTF-8会自动转码
*这里演示如何程序转码,所以请点击右侧的取消按钮
doedit D:/Lian/writer.do
*转码wirter.do文件
QTransUni, path(D:/Lian) filespec(writer.do)
*查看转换后的writer.do文件
doedit D:/Lian/writer.do

*若要Lian的文件夹所有Stata相关文件批量转码,命令如下:

*所有dta文件
QTransUni, path(D:/Lian) filespec(*.dta)
*所有do文件
QTransUni, path(D:/Lian) filespec(*.do) 

当然,Stata自身的命令也可以完成这些任务,并且更为灵活,我们会新开贴讲述。

说明:这些Stata社区命令已经备份,若原网站失效,大家可以访问备份网址,Stata代码如下:


net from http://ds.epiman.cn/uploads/2022/07/