美文网首页stata Stata 用法学习
Stata15 Unicode:一次性转码,解决中文乱码问题

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

作者: stata连享会 | 来源:发表于2017-12-20 00:04 被阅读2571次

    作者:连玉君 (知乎 | 简书 | 码云)

    Stata 现场培训报名中……

    ua 命令使用说明

    ua 命令

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

    安装

    • 方法1:
      2018/1/6 更新: ua 命令已经被 SSC (help ssc) 收录。
      在 Stata 命令窗口中输入如下命令即可自动下载安装最新版的 ua 命令:
    ssc install ua, replace
    

    使用

    • 在 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实现上述功能,所有子文件夹名称均以返回值的形式存储于内存中。执行过程如下:

    image.png
    然后就可以写一个循环逐个文件夹进行转码了:
    image.png
    最终,君哥的程序长这样:
    image.png

    原始程序和使用方法

    涛哥的程序

    涛哥的程序尚未封装成 .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 *
    

    结语

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

    关于我们

    • Stata 连享会(公众号:StataChina)】由中山大学连玉君老师团队创办,旨在定期与大家分享 Stata 应用的各种经验和技巧。
    • 公众号推文同步发布于 【简书-Stata连享会】【知乎-连玉君Stata专栏】。可以在简书知乎中搜索关键词StataStata连享会后关注我们。
    • 点击推文底部【阅读原文】可以查看推文中的链接并下载相关资料。
    • Stata 现场培训报名中

    联系我们

    • 欢迎赐稿: 欢迎将您的文章或笔记投稿至Stata连享会(公众号: StataChina),我们会保留您的署名;录用稿件达五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。
    • 意见和资料: 欢迎您的宝贵意见,您也可以来信索取推文中提及的程序和数据。
    • 招募英才: 欢迎加入我们的团队,一起学习 Stata。合作编辑或撰写稿件五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。
    • 联系邮件: StataChina@163.com

    往期精彩推文

    Stata连享会推文列表

    Stata 现场培训报名中……


    Stata连享会二维码

    相关文章

      网友评论

        本文标题:Stata15 Unicode:一次性转码,解决中文乱码问题

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