stata13版本可以完美的实现在stata界面编写RTF文档,在之前的推文我们曾介绍过,详见关于RTF你不知道的命令、关于RTF你不知道的命令之番外篇等。但若使用stata14版本,输出中文字符到RTF文档会出现乱码的现象,如: clear all set more off tempname handle rtfopen `handle' using c:/rtf/mytable.rtf,replace file write `handle' '{\pard\b This is 实证研究结果\par}' _n rtfclose `handle' 以上命令在stata14中用rtfopen命令创建一个名为mytable的rtf文档,用file write写入“This is 实证研究结果”这句话,可以发现只有中文部分出现了乱码。这是由于RTF文档可以识别stata13版本使用的gb2312中文编码,但无法识别 stata14版本使用的UTF-8 编码。 要解决stata14版本输出RTF文档的中文乱码问题,就需要对中文内容进行转码,即将UTF-8编码转为RTF文档可以识别的gb2312编码。ustrto()函数可以帮我们做到这一点。 基本语法:ustrto(s,enc,mode) 顾名思义,ustrto ()= UTF-8 String to… 它可以将以UTF-8编码的unicode字符串”s”转化为其他编码格式。在语法中,”enc”即表示需要转化成的其他编码格式;”mode”可以用来设置不被编码”enc”所支持的Unicode字符的处理方式,其取值可为1、2、3和4,通常我们设置mode取值为1。 比如将”café”这个字符串转为ascii编码,但字符“é”是ascii无法支持的,”mode”的不同取值就代表处理”é”的不同方法: mode取值为1,用编码的“替换字符”替换”é”, ascii编码的替换字符为”char(26)”。(char(26)实际上是一个控制字符,在stata中无法显示,只能显示为下图的小方框) mode取值为2,跳过任何不受支持的字符。 mode取值为3,在第一个不受支持的字符处停止,只返回一个空字符串。 mode取值为4,用unicode转义字符替换”é” 因此,在stata14中,用ustrto()将”This is 实证研究结果”字符串转化为gb2312编码后再写入RTF文档,即可解决”实证研究结果”中文内容乱码的问题。 那么,如何将file write命令和ustrto函数结合使用呢?只需将file write命令编辑的字符串s写成 `=ustrto(“s”,”enc”,”mode”)’的形式即可。(注意,ustrto部分要使用宏的引号 ` ’ 括起来) 命令如下: clear all set more off tempname handle rtfappend `handle' using c:/rtf/mytable.rtf, replace file write `handle' '{\pard\b `=ustrto('This is 实证研究结果','gb2312',1)'\par}' _n rtfclose `handle' 如上图所示,中文乱码的问题已经解决。 在之前的推文中,我们也曾介绍过用esttab输出实证研究结果到RTF文档:esttab命令输出回归分析结果到RTF文档。如果想为每个实证研究结果添加标题,可以用file write编辑,但更为简便的方法是,直接使用esttab命令的“title” 功能。title(string),括号里添加标题名即可。但如果标题中含有中文,在stata14中也会出现乱码现象,这时候结合使用ustrto()函数同样可以解决乱码问题。 sysuse auto, clear estpost summarize price mpg rep78 foreign, detail esttab using c:/rtf/mytable.rtf, title(`=ustrto('描述性统计结果','gb2312',1)’) cells('count mean(fmt(3)) p50 sd(fmt(2)) min max ') noobs append 如果想将字符串转为UTF-8编码的格式,可以使用ustrfrom()函数,用法和ustrto类似,有兴趣的读者可以通过help来进一步了解~ 以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。 应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~ 文字编辑:强宇曦 技术总编:刘贝贝 |
|