美文网首页
一次性解决Stata中文乱码问题

一次性解决Stata中文乱码问题

作者: capture_cc | 来源:发表于2019-10-21 19:32 被阅读0次

在导入Stata时可能存在中文乱码问题,在stata15中可以通过unicode来解决:

help unicode

按照help文档,核心的转码步骤其实就三步

但是仅按照help文档无法对文档进行批量处理,而下载的数据中大多有多个需要转码的文件。对此,连老师已经写了ua程序来解决。不过ua程序仍然需要两步,为了进一步简化流程,想达到只需要告诉文件夹路径,就转码文件夹下面所有文件的效果,尝试参照ua命令写了如下的程序供大家参考,冒昧叫uaone吧。

使用方法如下:

uaone, d("E:\数据") // 默认转码为gb18030

* 如果需要对特定的.dta文件类型进行编码
uaone, d("E:\数据") f(dta)

* 采用其他编码类型
uaone, d("E:\数据") set(ibm-1392)

源代码如下,由于没有发布,需要大家把代码copy到Stata的"Do-file"里面运行一次,然后就可以正常使用啦。

使用过程中肯定存在很多bug,请多多赐教。。。

cap program drop uaone
program uaone
    version 13.0
    syntax [anything(everything)], Direction(string asis) [set(string asis) RETRanslate ///
                                    TRansoption(string asis) Filetype(string asis)]
/*
    Direction: Direction of the folder containing ".dta" files needing translation.
    set: Set an encoding type. Please type "unicode encoding list" for details.
    TRansoption: Options of "encoding translate", including "invalid(escape|mark|ignore)"
                "transutf8" "nodata" "replace (only when "reranslate" is specified)".
    RETRanslate: To do "unicode retranslate"
    Filetype: Default is to translate all file types.
*/
    preserve
    clear
    *test
    capture cd `direction'
    if _rc != 0{
        di as error ///
        "Unable to load the directions. Please double check the {bf:direction} you entered."
        exit 111
    }

    *Options settings
    local currdir `c(pwd)'
    local set gb18030
    local option
    local transchoice "translate"
    local file "*"

    if "`transoption'"!= ""{
        local option "`transoption'"
    }
    if "`set'"!=""{
        local setting "`set'"
    }
    if `"`retranslate'"'!=`""'{
        local transchoice "retranslate"
    }
    if `"`filetype'"'!=`""'{
        local file "*.`filetype'"
    }

    di in w _dup(35) "="
    di "{it: Translate Start}"
    di in w _dup(35) "="
    di _n(1)

    di in w "Files in the following directories"
    di in w "are to be analyzed or translated:"

    cap ssc install rcd
    rcd   // get the list of all sub-directories

    forvalues i = 1(1)`r(tdirs)'{
       local dir`i' `"`r(ndir`i')'"'
    }

    di _n
    di in w _dup(35) "-"
    di "translating"
    di in w _dup(35) "-"

    forvalues i = 1(1)`r(tdirs)'{
        qui cd `"`dir`i''"'
        local filename: dir . files "`file'",respectcase
        if `"`filename'"' != ""{
            foreach fn of local filename{
                qui unicode encoding set "`set'"
                qui unicode `transchoice' `"`fn'"',`option'
                di _n
                di "■" _s(2) `"`fn' {it:`transchoice' completed}"'
            }
        }
        else{
           continue
        }
    }

    di _n(1)
    di in w _dup(35) "="
    di "{it: Translation Completely}"
    di in w _dup(35) "="
    restore
    qui cd `currdir'
end

相关文章

网友评论

      本文标题:一次性解决Stata中文乱码问题

      本文链接:https://www.haomeiwen.com/subject/ztrxvctx.html