在上篇推文中,我們用Stata中的import delimited的encoding 選項來解決亂碼問題。除了這種方法,Stata也提供了一組unicode命令,可以幫助我們對於一個文件或者一個文件夾下的多個文件進行轉碼以解決亂碼問題。我們可以試一下,對上述文件先進行轉碼後再讀入。程序如下:
clear allcd D:\stata16\基金經理 //指定轉碼文件所處的文件夾unicode analyze 歷任基金經理.txt // 分析文件是否需要轉碼unicode encoding set gb18030 //設定轉碼的類型為中文即編碼為gb18030unicode translate 歷任基金經理.txt //對文件進行轉碼轉碼後讀入:
那麼,針對一個文件夾下多個或全部文件如何進行轉碼呢?和上述程序沒有本質區別,略微改動即可。程序如下:
clear allcd D:\stata16\需要轉碼 //進入到你想要轉碼的文件夾unicode analyze *.txt //分析文件下所有txt文件(視具體情況用*/*.do/*.dta等)unicode encoding set gb18030unicode translate *.txt //轉碼文件夾下所有txt文件(視具體情況用*/*.do/*.dta等)注意:通配符*表示轉碼文件夾下所有類型文件,*.do或者*.dta則表示要轉碼文件夾下的所有do文件或者dta文件。 以上程序看起來很好用,但是只有當前工作目錄中的文件可以使用unicode命令系列完成,如果我們要對許多文件夾下的文件進行轉碼時,用上述命令的話就不合適了,因為需要頻繁手動更改路徑,一次一次不停的轉碼,十分費時費力,那有什麼命令可以一步到位嗎?當然有!unicode all(ua)命令,可以幫助我們一次性對當前工作路徑以及所有子文件夾下的文件進行轉碼。下面我們一起來看一下吧!二、unicode all(ua)命令unicode all(ua)命令是2017年由連玉君老師編寫的,初衷就是為了可以一次性對當前工作路徑以及所有子文件夾中的文件進行轉碼,以保證中文字符可以正常顯示。現在我們來看看應該如何安裝與使用。(一)安裝1.由於ua命令是外部命令,所以我們首先要下載並安裝。連玉君老師寫過一篇文章給出了連結(https://gitee.com/arlionn/ua),我們要下載 ua.ado 和 ua.hlp 文件,放置於Sata16下相應的位置。如ua.ado文件放在D:\stata16\ado\base\u 文件夾中, ua.hlp 文件放在D:\stata16\ado\plus\u中。
2.我們使用命令 ssc install ua進行安裝後,也能夠成功運行。
(二)使用我們可以在Stata中輸入help ua 查看ua命令的用法。具體程序如下:clear allcd //進入到你想要轉碼的文件夾(此時文件夾中有多個子文件夾) ua:unicode encoding set gb18030 //設定轉碼的類型為中文即編碼ua:unicode translate * //(視具體情況用*/*.do/*.dta等)注意:通配符*表示轉碼文件夾下所有類型文件,*.do或者*.dta則表示要轉碼文件夾下的所有do文件或者dta文件。
(三)例子現在我們要對如下圖的文件夾下的5個子文件夾進行轉碼。若不使用ua命令,我們需要分別進入到這5個子文件夾路徑下,將上述對一個文件夾中多個文件進行轉碼的程序進行5次,依次進行轉碼的確麻煩(我們這裡包含的子文件夾少,或許還不是太麻煩,但若包含成百上千個子文件的話,確實需要ua命令來一步到位)。需要轉碼的文件夾:
我們先隨便讀入其中兩個文件:
1、4a文件夾下的一個亂碼文件
2、資產總計文件夾下的一個亂碼文件
下面我們開始進行轉碼,程序如下:
clear allssc install ua //安裝ua命令cd D:\stata16\需要轉碼 //進入到我們要轉碼的文件夾 ua: unicode encoding set gb18030 //設定轉碼的類型為中文ua: unicode translate *.txt //這裡對子文件裡所有txt類型的文件進行轉碼Stata結果窗口顯示:
1、安裝ua命令:
2、設定轉碼類型(這裡僅截屏3個):
3、執行下列命令:
ua: unicode translate *.txt
Stata會從上到下遍及每個文件夾,開始對所有txt文件進行轉碼。(以下截屏第一個子文件夾和最後一個子文件夾轉碼結果)
4、現在我們再次讀入上述展示的兩個亂碼文件,驗證是否轉碼成功,我們發現沒有出現亂碼。
通過上述程序,我們順利解決了當前工作路徑以及所有子文件夾中的文件亂碼問題。我們對ua命令的介紹到這裡就結束了,以後大家遇到這種情況,可以試著用本文的方法予以解決。![]()