Stata15 Unicode:一次性转码,解决中文乱码问题
作者:連玉君 (知乎 | 簡書 | 碼云)
?
Stata連享會 最新專題課程
- Stata連享會 精品專題 || 精彩推文
文章目錄
- Stata連享會 [最新專題課程](https://gitee.com/arlionn/stata_training/blob/master/README.md)
- Part A: ua 命令
- 1. ua 命令使用說明
- 1.1 ua 命令簡介
- 1.2 安裝
- 1.3 使用
- 1.3.1 Stata 范例
- 1.3.2 你如何用 ?
- ? ? ?
- Part B: 開發小故事(程序撰寫過程)
- 2. 故事背景
- 3. 背靠背工作記錄
- 3.1 有想法:2017/12/18 17:05
- 3.2 同時完工:2017/12/19 22:28
- 4. 我們的思路有何差別
- 5. 原始程序和使用方法
- 5.1 濤哥的程序
- 5.2 君哥的程序
- Stata 范例
- 6. 結語
- 關于我們
- 聯系我們
- 往期精彩推文
Part A: ua 命令
1. ua 命令使用說明
1.1 ua 命令簡介
適用于 stata15 用戶。可以一次性對當前工作路徑以及所有子文件夾中的文件進行轉碼(unicode),以保證中文字符可以正常顯示。
1.2 安裝
- 方法1:
2018/1/6 更新: ua 命令已經被 SSC (help ssc) 收錄。
在 Stata 命令窗口中輸入如下命令即可自動下載安裝最新版的 ua 命令:
- 方法2:
- 到這里 - 下載 ua.ado 和 ua.hlp,放置于 D:\stata15\ado\base\u 或 D:\stata15\ado\plus\u 文件夾中。(下載地址:https://gitee.com/arlionn/ua)
1.3 使用
- 在 Stata 命令窗口中輸入 help ua,查看命令介紹和 Stata 范例。參照范例使用即可。
1.3.1 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 *1.3.2 你如何用 ?
復制如下代碼,每次使用時,選中如下三行,按快捷鍵 Ctrl+D 即可完成轉碼。你只需修改需要轉碼的文件路徑即可:
. cd "D:\stata15\ado\personal\mypaper" // 請自行修改路徑 . ua: unicode encoding set gb18030 . ua: unicode translate *?
?
?
注:后續內容與 ua 命令的使用沒有直接關系,只是記錄了程序的撰寫過程。
?
?
?
……最新專題課程……
Part B: 開發小故事(程序撰寫過程)
2. 故事背景
我昨天下午 5 點有個需求:我是從 Stata 13 直接跳到 15 的。可是,Stata 15 的中文編碼方案全變了,導致 do-file 和數據文件中的中文字符全是亂碼。Stata 提供了一組 unicode 開頭的命令,可以很方便地進行轉碼。但只能一個文件夾一個文件夾地轉。我用了 14 年的 stata,有成百上千個文件夾需要轉碼! 搜索了半天無果。只好求助濤哥 (李春濤是也)。
濤哥的第一反應是需要編程。我們的共識是需要遍歷所有文件夾,記錄下來,然后用循環語句進入每一個文件夾,進行轉碼。
我以為他會停幾天再開始做這個工作。又不好催促他,以便搭他的便車。只好自己開始弄。或許他也不好意思搭我的便車,哈哈。
沒想到今天晚上寫好所有程序和說明文檔后分享給他時,他居然也完工了!
看來,有好奇心的人都是一樣的亟不可待!
3. 背靠背工作記錄
3.1 有想法:2017/12/18 17:05
3.2 同時完工:2017/12/19 22:28
4. 我們的思路有何差別
整體思路:遍歷當前文件夾下的所有子文件夾,對每個文件夾進行轉碼。
問題的關鍵:如何遍歷所有的子文件夾,并記錄這些文件夾的名稱。
濤哥的思路:使用如下 dos 命令遍歷當前工作文件夾下的所有子文件夾,并將他們存入一個文本文件 output.txt,隨后使用infix命令讀入內存:
!dir /B /S /ad >> output.txt infix strL v 1-2000 using "output.txt"最終,濤哥的程序長這樣:
君哥的思路:使用外部命令rcd實現上述功能,所有子文件夾名稱均以返回值的形式存儲于內存中。執行過程如下:
然后就可以寫一個循環逐個文件夾進行轉碼了:
最終,君哥的程序長這樣:
5. 原始程序和使用方法
5.1 濤哥的程序
濤哥的程序尚未封裝成 .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{clearcd `"`c'"'unicode encoding set gb18030cap unicode translate * , transutf8 }5.2 君哥的程序
已經封裝成 .ado 文件,并配有說明文檔。請到 Stata連享會-碼云-ua項目中(鏈接為:https://gitee.com/arlionn/ua )下載 ua.ado 和 ua.hlp 文件,放置于 D:\stata15\ado\base\u 或 D:\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 *6. 結語
生活如此美好!因為有你有我!
?
關于我們
- 【Stata 連享會(公眾號:StataChina)】由中山大學連玉君老師團隊創辦,旨在定期與大家分享 Stata 應用的各種經驗和技巧。
- 公眾號推文同步發布于 【簡書-Stata連享會】 和 【知乎-連玉君Stata專欄】。可以在簡書和知乎中搜索關鍵詞Stata或Stata連享會后關注我們。
- 點擊推文底部【閱讀原文】可以查看推文中的鏈接并下載相關資料。
- Stata連享會 精彩推文1 || 精彩推文2
聯系我們
- 歡迎賜稿: 歡迎將您的文章或筆記投稿至Stata連享會(公眾號: StataChina),我們會保留您的署名;錄用稿件達五篇以上,即可免費獲得 Stata 現場培訓 (初級或高級選其一) 資格。
- 意見和資料: 歡迎您的寶貴意見,您也可以來信索取推文中提及的程序和數據。
- 招募英才: 歡迎加入我們的團隊,一起學習 Stata。合作編輯或撰寫稿件五篇以上,即可免費獲得 Stata 現場培訓 (初級或高級選其一) 資格。
- 聯系郵件: StataChina@163.com
往期精彩推文
- Stata連享會推文列表
- Stata連享會 精彩推文1 || 精彩推文2
Stata連享會 精彩推文1 || 精彩推文2
總結
以上是生活随笔為你收集整理的Stata15 Unicode:一次性转码,解决中文乱码问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 字符串操作(string替
- 下一篇: ios 上传图片到阿里云的oss_JEE