STATA中的Markdown转换命令markstat

% Stata Markdown
% wintryheart
% 2019年7月1日

STATA Markdown

前言

本文基于markstat命令的开发者Germán Rodríguez的使用说明整理。原文请见
GR的Stata Markdown主页

0、准备

STATA 15开始支持Markdown。个人认为markstat比STATA15自带的markdown命令更好用。

我的STATA版本是14,需要安装两个命令和一些外部程序。

1)安装两个命令:

  1. markstat 用于执行包含stata和markdown代码的动态文件。

ssc install markstat

  1. whereis 用于指定外部程序和辅助文件的路径目录。

**ssc install whereis **

2)安装外部程序

  1. Pandoc 用于把Markdown转换成HTML,PDF,或DOCX的程序。

  首先,请去Pandoc的官网下载。

  安装好后,打开STATA,使用whereis命令指定Pandoc程序的位置。

whereis pandoc "c:/program files/pandoc/pandoc.exe"

  1. R 如果想包含R代码,需要先安装R,然后用whereis指定R程序位置。

whereis R "c:/program files/R/R-3.4.3/R/bin/x64/R.exe"

  1. Latex 可选。操作同上类似。但我倾向于用Pandoc转成HTML,然后用浏览器转成PDF。

2、编写markstat文件(.stmd)

注意:markstat使用{{n}}作为stata代码的预留块的标记,所以在编写markstat文件时,
不要使用双大括号。

1)包含stata代码的最简单的文件

Stata代码只需要缩进 1个tab或4个空格。如下例:

Let's read the fuel efficiency data that comes with Stata,
compute gallons per 100 miles, and regress that on weight

   sysuse auto, clear
   gen gphm = 100/mpg
   regress gphm weight

We see that heavier cars use more fuel, with 1,000 pounds requiring
an extra 1.4 gallons to travel 100 miles.


Let's read the fuel efficiency data that comes with Stata,
compute gallons per 100 miles, and regress that on weight

sysuse auto, clear
gen gphm = 100/mpg
regress gphm weight

We see that heavier cars use more fuel, with 1,000 pounds requiring
an extra 1.4 gallons to travel 100 miles.


2)Markdown

Markstat支持通用的markdown语法。也支持HTML语法,但是如果要直接生成PDF文件,
建议不要插入HTML语法。

3)数学公式

  1. 支持$ $ 行内插入公式。
  2. 支持$$ $$ 插入公式块。
  3. 输出漂亮的公式,建议执行markstat命令时添加mathjax选项。
  4. 公式块,建议缩进输入公式。不用担心会和stata命令相混淆。
$$
    y = \alpha + \beta x + e
$$

输出结果为:

y = \alpha + \beta x + e

4)Metadata 文件标记

Pandoc支持文件的标题、作者和日期作为metadata。

注意,必须在文件开头第一行开始用%标注相关信息。

例如:

% Stata Markdown
% Germán Rodríguez
% 26 October 2016

5)代码块Fenced Code Blocks

前面提到用“1个tab或4个空格”的规则来区分STATA和Markdown的代码。

规范做法最好用代码块。

a) STATA代码块

```s 
    //STATA code goes here
```

或者

```{s}
    //STATA code goes here
```

如果不返回命令

```s/ 或者 {s/} 
    //STATA code goes here
```

6)行内代码(Inline code)

行内代码的语法:

`s [fmt] expression`  // fmt是可选格式

例如:

    quietly sysuse auto, clear
    quietly gen gphm = 100/mpg
    quietly regress gphm foreign

The R-squared of the regression is ` s e(r2) `, or ` s%5.2f e(r2) `。

如果要在行内引用R代码的结果,语法类似为` r expression `。注意,这里没有fmt选项。如果对结果格式化,可以使用round()函数。例如

    library(haven)
    auto <- read_dta("auto.dta")
    q <- quantile(auto$price, 0.75); q

the 75-th percentile is ` r round(q, 1) `。

7)图片

图片的物理尺寸是由STATA的graph export命令中的width选项设定。

默认在HTML中使用图片的实际尺寸,在PDF中使用行宽的75%的尺寸。

Markdown连接中添加width选项,可以修改和设置图片尺寸。有三种选择:

  1. 使用in设定英寸宽度;
  2. 使用cm设定厘米宽度;
  3. 使用\%设定相对尺寸。
    例如 :
![caption](filename.png){width=100%}  //设定图片的相对宽度为100%,图片将随浏览器的大小而变化。

8)文献引用

由于使用Pandoc作为转换引擎,markstat还可以处理参考文献引用。

简单来说,先为参考文献创建一个BibTex数据库文件,然后在markstat文件的Metadata行中包含对该数据库文件的引用。详细例子参见Citations说明

例子

第一步,创建BibTex数据库,本例命名为markstat.bib。内容如下:

% Encoding: UTF-8
@book{knuth92,
    author = "Donald Knuth",
    title = "Literate Programming",
    publisher = "{CSLI} Lecture Notes",
    address   = "Stanford, CA",
    year = 1992

@article{peng09,
    author = "Roger D. Peng",
    title = "Reproducible Research and {\em Biostatistics}",
    journal = "Biostatistics",
    volume = 10,
    number = 3,
    pages = "405--408",
    year = 2009
}
@inproceedings{rossini01,
    author = "A. J. Rossini",
    title = "Literate Statistical Practice",
    editor = "K. Hornick and F. Leisch",
    booktitle = "DSC 2001. Proceedings of the 2nd International Workshop on Distributed Statistical Computing",
    url = "http://www.R-project.org/conferences/DSC-2001",
    year = 2001
}
@inproceedings{leisch02,
    author = "F. Leisch",
    title = "Sweave: Dynamic generation of statistical reports using literate data analysis",
    editor = {Wolfgang H{\"a}rdle and Bernd R{\"o}nz},
    booktitle = "Compstat 2002. Proceedings in Computational Statistics",
    pages = "575-580",
    publisher = "Physika Verlag, Heidelberg, Germany",
    year = 2002

第二步,在markstat文件(.stmd)的YAML metadata块指定该数据库文件。

---
title: Literate Data Analysis
author: Germán Rodríguez
date: 1 June 2017
bibliography: markstat.bib
---

Donald Knuth [-@knuth84] is a strong believer in documenting computer programs and originated the term *literate programming*. This concept is even more important in data analysis, where documenting each step
in data collection, processing and analysis is crucial [see @leisch02; @rossini01]. 

## References
---

第三步,设定引用格式

markstat默认的是 the Chicago Manual of Style author-date 格式。

文献管理样式库(the Zotero Style Repository)中有8000多种文献引用样式,可以从中选择所需下载引用样式语言(Citation Style Language)文件(.csl文件),然后添加进YAML块的Metadata数据行中。

例如,采用IEEE格式。

---
title: Literate Data Analysis
author: Germán Rodríguez
date: 1 June 2017
bibliography: markstat.bib
csl: proceedings-of-the-ieee.csl
---

第四步,运行markstat时添加bibliography选项。

9)幻灯片
还是由 于Pandoc,markstat也支持生成幻灯片,在HTML显示使用S5引擎,在PDF中显示使用Beamer。

首先,必须在YAML metadata块,提供title,author和data,这些信息会显示在幻灯片的首页。

其次,在STATA和Markdown代码中使用特定的语法来设定每张幻灯片。

  • 在一个简单的PPT中,level 1的每个标题(heading)定义一个幻灯片,然后是内容。内容通常包括要点(Bullet points),以及使用Stata生成的图和表。
  • 在一个多部件PPT中,级别1的标题(level1 heading)定义部件(parts)并生成标题幻灯片页(title slides),级别2的标题(level2 heading)定义幻灯片。Pandoc计算出幻灯片级别,寻找最高级别的标题,紧接着是内容。
  • 如果PPT中包含图片,可以用使用Mardown语法![title](source){width="60%"}来引用图片。
  • 如果使用Beamer,要在包含STATA命令和输出的幻灯片页的标题中(the heading of slides)添加{.fragile}

例子:

3、执行markstat文件(.stmd)

STATA命令:

** markstat using filename [, pdf docx slides beamer mathjax bibliography strict nodo nor keep]**

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,875评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,569评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,475评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,459评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,537评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,563评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,580评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,326评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,773评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,086评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,252评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,921评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,566评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,190评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,435评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,129评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,125评论 2 352

推荐阅读更多精彩内容