使用Stata生成可重复报告

彭华@StataCorp

2018 Stata 中国用户大会

https://huapeng01016.github.io/China18/

Stata可重复研究与报告

Stata可重复研究

  • 简单收集手工操作到do-file
  • 不同版本间良好的数据和脚本文件兼容性(version control)

新增加的可重复研究与报告工具

  • putdocx
  • dyndoc
  • putpdf

putdocx

使用命令结果产生表格

估计命令结果表格

regress 油耗 重量
putdocx table tbl_reg = etable

margins

regress 油耗 重量 i.国籍 i.维修记录78
margins 国籍 维修记录78 
putdocx table tbl_marg = etable

estimates table

quietly regress 油耗 重量 变速比 转弯半径
estimates store 模型1
quietly regress 油耗 重量 变速比 转弯半径 国籍
estimates store  模型2
estimates table 模型1 模型2,      ///
    varlabel b(%7.4f)           /// 
    stats(N r2 r2_a) star
putdocx table tbl_est = etable

从数据文件产生表格

putdocx table tbl_data = data(_all)

改变表格格式外观

        // 去除边界
putdocx table tbl_data_1 = data(_all), border(all,nil)
        //  改变第一行边界
putdocx table tbl_data_1(1,.), border(bottom,double)
putdocx table tbl_data_1(3,.), border(bottom, dotted)
        // 扩展第一格占三列 
putdocx table tbl_data_1(1,1), colspan(3) halign(center)
putdocx table tbl_data_1(14,.), border(top,dotted)
putdocx table tbl_data_1(17,.), border(top,double)
        // 扩展17,18行第一格占三列,对齐左侧, 斜体 
putdocx table tbl_data_1(17,1), colspan(3) halign(left) italic
putdocx table tbl_data_1(18,1), colspan(3) halign(left) italic

嵌套表格

    // table may be created in memory using -memtable- option
regress 油耗 重量 if 国籍, cformat(%9.4f) 
putdocx table tbl_f = etable, memtable
regress 油耗 重量 if !国籍, cformat(%9.4f) 
putdocx table tbl_d = etable, memtable
    // add tables in memory into cells of another tbale
putdocx table tbl_l = (2, 2)
putdocx table tbl_l(1, 1)  = ("国外"), halign(center)
putdocx table tbl_l(1, 2)  = ("国内"), halign(center)
putdocx table tbl_l(2, 1)  = table(tbl_f)
putdocx table tbl_l(2, 2)  = table(tbl_d)   

命令输出

dyndoc

dyndoc fuel.txt, replace    

动态标签

dd_do

<<dd_do>>
use examples/auto_zh.dta, clear
regress 油耗 重量
<</dd_do>>

. use examples/auto_zh.dta, clear
(1978年汽车数据)

. regress 油耗 重量

      Source |       SS           df       MS      Number of obs   =        74
-------------+----------------------------------   F(1, 72)        =    194.71
       Model |  87.2964971         1  87.2964971   Prob > F        =    0.0000
    Residual |  32.2797637        72  .448330051   R-squared       =    0.7300
-------------+----------------------------------   Adj R-squared   =    0.7263
       Total |  119.576261        73  1.63803097   Root MSE        =    .66957

------------------------------------------------------------------------------
        油耗 |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
        重量 |    .003102   .0002223    13.95   0.000     .0026589    .0035452
       _cons |   .7707669   .3142571     2.45   0.017     .1443069    1.397227
------------------------------------------------------------------------------

改变标签属性

<<dd_do:quietly>>
matrix eb = e(b)
<</dd_do>>

显示Stata结果

  • 线性回归结果显示重量每增加一百公斤,每百公里油耗增加<<dd_display:%9.4f eb[1,1]*100>>公升。
  • 线性回归结果显示重量每增加一百公斤,每百公里油耗增加 0.3102公升。

dd_graph

<<dd_do>>
scatter 油耗 重量, mcolor(%50)
<</dd_do>>
<<dd_graph:sav(sc_gp100m_weight.png) replace>>

更多动态标签

条件标签

<<dd_skip_if: ("`details'"=="")>>
等速油耗是指汽车在良好路面上作等速行驶时的燃油经济性指标。
<<dd_skip_end>>

加入文本文件

<<dd_include: /path/file>>

Markdown

标题

# 标题 1
## 标题 2
### 标题 3

代码块

"~~~~" 或 "````"代码块

重点

asterisks (*) underscores (_)重点 

图像

![Alt text](/path/to/img.jpg "Optional title")

链接

This is [an example](http://example.com/ "Title") link.

实例

dyndoc fuel_consumption.txt, replace 

使用参数

从一个动态文件应用参数生成一组网页

用户开发命令

ssc 使用pandoc to convert Markdown documents:

  • dynpandoc
  • markstat
  • markdoc
  • webdoc

pandoc

动态文件生成

命令

    // web page
dynpandoc fuel_cc.txt, saving(fuel_pandoc.html) /// 
        from(markdown) replace  
    // docx
dynpandoc fuel_cc.txt, saving(fuel_pandoc.docx) /// 
        from(markdown) replace                  /// 
        pargs("--reference-doc=reference.docx") 
    // PDF
dynpandoc fuel_cc.txt, saving(fuel_pandoc.pdf)  /// 
        from(markdown) replace

总结

  • putdocx生成Word文件
  • dyndoc生成网页web pages
  • putpdf生成PDF文件

谢谢!