哈喽,诸君安。我们在推文Listtab!看完我们就粗去玩!中介绍了listtab命令,它也可以将RTF格式数据列表导出到RTF文档。但如何创建特定格式的RTF数据列表呢?stata的RTF命令大礼包中,rtfrstyle命令可轻松搞定。
rtfrstyle命令语法
rtfrstyle [ varlist ] [ , cwidths(numlist) trgaph(#) trleft(#)tdposition(tabdef_position)tdadd(string)cdadd(string_list) missnum(string)local(local_macro_name_list) ]
1.[varlist]中指定构成数据列表的变量即可
2.cwidths(numlist)以缇(单位)指定每个变量的列宽,列宽设置的位置与[varlist]中变量的位置是一一对应,因此列宽设置的个数等于变量数。如果未指定cwidths(),则默认列宽1440缇(等于一英寸)。
3.trgaph()选项,用来设置行单元格之间的间隔,如果没有定义,默认空2格
4.trleft()选项,设置表格左边缘的位置
5.tdadd()选项,自由定义表行样式。例如,tdadd(“\ trqr”)表示行单元格居中对齐
6.missnum()选项,设置表达数据列表缺失值的字符串,默认是空字符串,如果数据列表没有缺失值,就无需考虑设置该选项。
介绍到这,大家是不是觉得列表的格式语句好复杂,但好在rtfrstyle有默认的表格样式,用户对表格样式没有特殊要求的话是不需要添加上述命令选项的。
如何用listtab命令导出默认格式的RTF列表呢?我们介绍过listtab导出表格时需要定义begin(), end(), delimiter() and missnum()四个基本选项设置表格导出样式。若手动输入RTF文档格式的语法又复杂又容易出错,这时我们可以通过rtfrstyle的local()选项将RTF表格默认格式设置放在宏里,listtab命令导出时直接调用宏即可。local( b d e)就表示将rtfrstyle对begin(), end(), delimiter()选项的默认设置放在宏里。下面我们举一个例子来帮助大家理解rtfrstyle+listtab:
1
创建列表数据
为了方便大家获取数据,我们以股票交易数据为数据样本
cntrade 2
keep stknme rit date
keep in 1/10
2
创建RTF文档
创建一个RTF文档,并为即将导入的数据列表编写好标题“股票交易数据”
tempname handle
rtfopen `handle' using "c:/rtf/my.rtf",replace
file write `handle' "{\pard\b\fs60`=ustrto("股票交易数据","gb2312",1)'\par}"
(在之前的推文ustrto函数将中文乱码打回原形中我们介绍过,为了避免stata14版本导出到RTF文档会出现中文乱码,可以用ustrto函数对中文进行转码。)
3
对含中文的变量进行转码
我们的数据列表中,stknme值含有中文,同样需要对其进行转码以避免中文乱码。如何对整个变量进行转码呢?
replace stknme = ustrto(stknme, “gb2312”,1)
注意到 变量名stknme 并未放入””中,ustrto(变量名,”gb2312”,1)即表示对整个变量转码。
4
将股票交易数据制成RTF表格
通过rtfrtyle命令将股票交易数据制成RTF表格
rtfrstyle stknme rit date , local(b d e)
(我们使用了RTF表格的默认格式,并将begin() end() delimiter()三个选项默认值放在了local宏里)
5
用listtab命令导出表格
listtab stknme rit date, handle(`handle') begin("`b'") delim("`d'") end("`e'")
head("`b'\ql{`=ustrto("股票代码","gb2312",1)'}`d'\qr{`=ustrto("日收益率","gb2312",1)'}`d'\qr{`=ustrto("交易日期","gb2312",1)'}`e'")
(注意:listtab命令的begin delim 和end选项值我们直接调用了rtfstyle的宏)
如图所示,RTF文档导入了我们所需的股票交易数据列表。在stata14版本中,如果我们不对stknme变量进行转码,就会出现下图乱码情况:
如果我们想将交易日期单元格的列宽加长,只需在rtfrstyle命令后添加cwidths选项来改变列宽,比如将date变量的列宽设置为2160缇:
tfrstyle stknme rit date, cwidths( 1440 1440 2160) local(b d e)
**变量名位置和其列宽是一一对应的
附完整程序:
clear
set more off
cntrade 2
keep stknme rit date
keep in 1/10
tempname handle
rtfopen `handle' using "c:/rtf/datalist.rtf",replace
capture noisily {
file write `handle' "{\pard\b\fs60`=ustrto("股票交易数据","gb2312",1)'\par}"
replace stknme = ustrto(stknme,"gb2312",1)
rtfrstyle stknme rit date , cwidths( 1440 1440 2160) local(b d e)
listtab stknme rit date, handle(`handle') begin("`b'") delim("`d'") end("`e'") head("`b'\ql{`=ustrto("股票代码","gb2312",1)'}`d'\qr{`=ustrto("日收益 率","gb2312",1)'}`d'\qr{`=ustrto("交易日期","gb2312",1)'}`e'")}
rtfclose `handle'
以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。
应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~
文字编辑:司海涛
技术总编:刘贝贝
往期推文推荐:
7.一言不合就用stata写邮件(Outlook/Foxmail)
9.I have a Stata, I have a python
10.I have a Stata, I have a Python之二——pdf转word
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
欢迎关注爬虫俱乐部
微信扫一扫
关注该公众号