Stata如何将数据转码为utf-8格式?

Stata14开始支持Unicode字符,变量、标签、注释及变量值均可以为中文(日韩德等等)了。之后版本若直接读取Stata13及之前的文件( .do 文件和.dta 文件一般为 gbk 或更广泛的gb18030 编码)会显示乱码,影响使用,Stata提供了unicode命令进行转化,简单介绍如下。

使用 Stata 13 及早期版本保存的 do 文件和 .dta 文件一般为 gb2312 或 gbk 或 gb18030 编码

下载演示数据,Stata代码如下:

*在D盘新建名为Lian的文件夹
mkdir d:/Lian
*下载演示数据库,并重命名,以生成多个数据库,留空则为原数据库名称,replace表示覆盖已有同名数据库
copy http://ds.epiman.cn/uploads/2022/07/wirter.dta  D:/Lian/
copy http://ds.epiman.cn/uploads/2022/07/wirter.dta  D:/Lian/wirter1.dta
copy http://ds.epiman.cn/uploads/2022/07/wirter.dta  D:/Lian/wirter2.dta
copy http://ds.epiman.cn/uploads/2022/07/wirter.do  D:/Lian/
copy http://ds.epiman.cn/uploads/2022/07/wirter.do  D:/Lian/wirter1.do
copy http://ds.epiman.cn/uploads/2022/07/wirter.do  D:/Lian/wirter2.do,replace

预览一下乱码,可以用菜单,这里用命令,Stata代码如下:

*数据格式预览乱码的效果
use D:/Lian/wirter.dta,clear
list
*查看转换后的wirter.do文件
doedit D:/Lian/writer.do

Stata的数据库转码,Stata代码如下:

*清空内存(必须步骤)
clear
*进入当前目录(必须步骤)
cd D:/Lian
unicode analyze writer.dta
* 一般gbk就够用了,也可以设置为gb18030
unicode encoding set gbk
unicode  translate "writer.dta", transutf8

运行后Stata界面会有转化结果说明,并将原文件转移至目录下的bak.stunicode文件夹下备份,所以转化命令只能运行一次,如果结果不合预期,可以删除,并将bak.stunicode的原文件复制出来重新转化。

极个别情况下转换后若还存在乱码,可以在translate命令后面加上invalid选项,再进行转化。

单个文件转码结束,还可以批量转码。

Stata的do文件转码,Stata代码如下:


unicode  translate "writer.do", transutf8

如果是批量剩下的文件转码(目录下的wirter1和wirter2四个文件),Stata代码如下:

*wirter1和wirter2两个dta文件
unicode  translate "writer?.dta", transutf8
*wirter1和wirter2两个do文件
unicode  translate "writer?.do", transutf8

上述writer后的?是通配符,代表一位数字或字符,如writer1-writer9;若要两位数可以用??;
若是以writer开头的所有变量可以writer*;
若变量名没有规律,*.dta代表所有dta文件,*.do代表所有do文件,*.*代表所有文件。

拓展一下,虽然转码时Stata会自动备份原文件到目录下的bak.stunicode文件夹下,如果担心误操作,可以在转化前写命令将文件备份在其他地方,Stata代码如下(加在cd 当前工作目录的下一行):

*在当前文件夹下创建空的备份文件夹
mkdir "我的备份"
local allfiles: dir . files "*.*"
*因为copy命令每次只能复制单个文件,所以我们写个循环
foreach eachfile of local allfiles {
	copy `eachfile' "我的备份/", replace	
}

完,本文内容交流请移步:http://www.epiman.cn/thread-72568-1-1.html