Stata:利用Stata生成动态文档-Quarto

发布时间:2023-09-12 阅读 467

Stata连享会   主页 || 视频 || 推文 || 知乎 || B 站

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令搜推文,记笔记:
安装:
. ssc install lianxh
用法:
. help lianxh
实例
. lianxh 合成控制
. lianxh DID + 多期, w

课程详情 lianxh.cn

课程主页 lianxh.cn

⛳ Stata 系列推文:

作者:黄晨晨 (厦门大学)
邮箱chens_huang@163.com

编者按:本文主要摘译自下文,特此感谢!
Source:Fernando Rios-Avila, Using Quarto for Stata dynamic documents. -Link-


目录


1. 简介

动态文档将 dofile、报告正文和输出结果 (包括图表) 等整合在一个文档中,我们可以通过动态文档创建可重复性报告。如果数据和假设发生变化,只需要修改 Stata 命令而不需要逐条修改变动的内容就可以重新生成报告。

在介绍 nbstata 的推文中我们介绍了如何通过 nbstata 实现 "Jupyter Notebook + Stata" 模式。在此基础上结合 Quarto 就可以轻松实现动态文档的创建。

本文是一个如何使用 Quarto 在 Stata 中创建动态文档的简单示例,以 Anaconda 中的 Jupyter Notebook 软件操作为例。

在开始前你需要准备:

  • Stata 17 及以上版本
  • Python
  • nbstata

2. 安装 nbstata

假设你已经安装了 Stata 和 Python,并且配置好了环境,打开 Anaconda Prompt 输入以下指令安装 nbstata

pip install nbstata
python -m nbstata.install 

# 更新 nbstata 
pip install nbstata --upgrade

nbstata 的具体介绍和操作可以查看介绍 nbstata 的推文。

3. Quarto

完成上述操作以后使用 Quarto 就很简单,在 Anaconda Navigator 窗口打开 Jupyter Notebook,新建一个 notebook,通过 KernelChange kernelStata(nbstata) 使用内核 nbstata 创建笔记本。

在首行输入以下内容:

---
title: Using Quarto for Stata dynamic documents
format: html
jupyter: nbstata
---

选中代码框,随后点击工具栏,选择 原生 NBConvert 将上述内容转为 YAML 标题,如下图所示:

后续的代码只需要使用 *| 作为单元格选项的前缀即可使用 Quarto

4. 实例

以研究 auto.dta 中的 mpgweight 变量为例。我们首先使用 sysuse 命令加载数据集,然后使用 describe 命令描述数据。

输入以下指令:

sysuse auto, clear
describe

现在,我们要检查 mpg 是否总是大于 0 且小于 100。我们使用 assert 命令来执行检查:

assert mpg > 0 & mpg < 100

如果数据不满足条件,Quatro 将以错误信息提示失败,如果我们在 do-file 中运行相同的 assert 命令,也会出现这种情况。

接下来,我们要对 weight 变量进行汇总:

summarize weight

我们想在句子中使用 weight 的最小值和最大值,可以使用 display 来显示 r(min)r(max) 存储的结果,而不是复制和粘贴 summarize 输出中的数字。我们还将使用选项 *| output: asis 来获取 Markdown 格式的文本。输入以下命令:

*| output: asis
display "The variable weight has minimum value "  %4.2f `r(min)' " and " ///
         "has maximum value "   %4.2f `r(max)' "."

换句话说,如果想使用动态标签,只需使用 display 和相应的本地变量就可以了,这样 Stata 就可以像正常情况一样对表达式进行求值。通过使用 *| output: asis,使得输出仍然可以用 Markdown 语法解释。

dyndoc 一样,display 也可以用作计算器。例如,如果我们想在句子中包含 range=maxmin 时,我们可以使用:

*| output: asis
display "The variable weight has range "  %4.2f `r(max)'-`r(min)' "."

现在,我们想用散点图来绘制 mpgweight 的关系图。至少有两种方法可以做到这一点。

首先,我们可以使用与 Stata 中相同的程序创建散点图:

scatter mpg weight, mcolor(blue%50)

这将生成带有 50% 不透明颜色标记的 mpgweight 散点图,如下图所示:

现在,我们将图形导出到文件中:

qui: graph export fig1.png, width(1600) replace

这将生成一个宽度为 1600 像素的图形。

我们也可以使用 Quatro 标记和指令来创建图形。不过,这里需要确保所有图形都已命名:

*| label: fig-cost
*| fig-cap: Price vs MPG
*| fig-subcap:
*|   - Foreign Cars
*|   - Domestic Cars
*| layout-ncol: 2
*| column: page

scatter price mpg if foreign==1,  ///
        name(m1, replace) ylabel(0(4000)16000)
graph export "fig2a.png", width(1600) replace

scatter price mpg if foreign==0,  ///
        name(m2, replace) ylabel(0(4000)16000)
graph export "fig2b.png", width(1600) replace

5. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 动态文档 jupyter, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

资源共享

课程主页 lianxh.cn

课程主页 lianxh.cn

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会视频课堂B 站 有很多视频课程,可以自由安排学习时间。
  • 推文主页:1000+ 推文,新方法新模型解读;知乎专栏:常见问题解答。

扫码加入连享会微信群,提问交流更方便

New! lianxh 命令搜推文,记笔记:
安装:
. ssc install lianxh
用法:
. help lianxh
实例
. lianxh 合成控制
. lianxh DID + 多期, w