CLDS2014/16数据转码出错

(2020年更新)
CLDS2014/16个人水平数据在stata14以上版本显示中文乱码,unicode translate转码会导致stata闪退,已经确定是数据的问题,跟Stata版本没关系。最后用了个笨办法,就是把数据和变量标签分成两次分别转码,需要用到stata 13,因为CLDS数据里面的中文在这个版本可以正常显示。处理过程如下:

  1. 用Stata 13打开数据文件。

    • 下载的数据如果是Stata 14格式的,stata 13无法直接读取,先用stata 14 或以上版本打开,用saveold 文件名1, version(13)命令存成stata 13格式,再使用Stata 13打开。
    • descsave 变量名, do(文件名2.do)命令把变量标签、变量类型、变量值标签存成do文件。不指定变量名时,默认保留全部变量的属性。
      • descsave需要在线安装,如果是STATA 16,直接用命令ssc install descsave即可安装,STATA 15及以前的版本,可以到作者Roger Newson主页下载,解压后把两个文件拷贝到STATA所在文件夹中的"ado\base\d"子文件夹里。
  2. 数据文件另存为csv格式,这样一来所有的标签就会被全部去掉,而只保留数据本身。命令为export delimited using 文件名3.csv,或者在File菜单找export子菜单,选择*.csv格式。

  3. 用Stata 14或15中的unicode对第1步生成的do文件转码。

    • 系统编码如未设置,需要先设置成gb18030,命令是unicode encoding set gb18030,具体可以help unicode
    • 接下来转码,命令是unicode translate 文件名2.do。这一步会把所有变量标签和变量值标签全部转成UTF 8编码。
  4. 用Stata 14或15读入第2步生成的文件名3.csv文件,读入时需要保持变量的大小写,原因是CLDS源文件很多变量名用了大写字母,第1步生成的do文件也就保留了大小写,但是import delimited命令读入csv文件时,默认把变量名所有字母自动转换成小写,不做设置的话,下一步运行do文件时会找不到变量名字。保留大小写的命令为import delimited using 文件名3.csv, case(preserve)

    • 调整大小写另一种处理办法:执行第一步之前,使用rename *, lower将所有变量名全改成小写,这一步的import里就不用设置case(preserve)了。
  5. 读入csv文件以后,执行第3步生成的文件名2.do文件,保存一下就是UTF 8编码的CLDS文件了。


为什么要用UTF 8编码?

UTF 8编码本身具有优势。在Stata 13的中文都是半角的,如果数据是中文的,比如地名、人名,使用条件语句查找记录或者观测对象,相邻两个汉字,第一个汉字的后一半和第二个汉字的前一半会组成新的汉字被识别,会产生大量错误的结果。就是因为使用带有中文的条件语句,才被逼着转到Stata 14并学习unicode命令。

最直接的原因:Stata 14以上的版本只支持UTF 8编码,除非你不用中文数据如果不用Unicode,包含中文的数据就没法在Stata 14以上的版本。

需要注意,UTF 8编码下,一个汉字占三个字符位,一些string命令可能要用到。Stata 13当中每个汉字占两个字符位。


如何阅读STATA 帮助文件

STATA 命令太多,必须知道如何通过帮助文件自学,但帮助文件都很长,刚开始很容易放弃。读帮助文件时,如果对帮助文件的结构有清楚的意识,读起来会容易很多。

具体来说,一个帮助文件至少有syntax(语法)Description(命令功能简介)Options(命令开关)Examples(例子)等几个部分。通常我会先读description,以理解这个命令的功能是不是我正在寻找的,然后猜想一下命令可能的语法,回去再看语法,再根据自己的需求看一下option,再猜可能用到哪些开关。以前对帮助文件的结构缺乏意识,直接按顺序从头读到尾,一看语法就开始发懵,再看帮助命令那么长,很容易放弃。

你可能感兴趣的:(CLDS2014/16数据转码出错)