STATA中的Markdown轉(zhuǎn)換命令markstat

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

STATA Markdown

前言

本文基于markstat命令的開發(fā)者Germán Rodríguez的使用說明整理患久。原文請(qǐng)見
GR的Stata Markdown主頁薄料。

0哈扮、準(zhǔn)備

STATA 15開始支持Markdown庄岖。個(gè)人認(rèn)為markstat比STATA15自帶的markdown命令更好用。

我的STATA版本是14,需要安裝兩個(gè)命令和一些外部程序痒钝。

1)安裝兩個(gè)命令:

  1. markstat 用于執(zhí)行包含stata和markdown代碼的動(dòng)態(tài)文件痴昧。

ssc install markstat

  1. whereis 用于指定外部程序和輔助文件的路徑目錄。

**ssc install whereis **

2)安裝外部程序

  1. Pandoc 用于把Markdown轉(zhuǎn)換成HTML巨朦,PDF米丘,或DOCX的程序。

??首先糊啡,請(qǐng)去Pandoc的官網(wǎng)下載拄查。

??安裝好后,打開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轉(zhuǎn)成HTML邪蛔,然后用瀏覽器轉(zhuǎn)成PDF急黎。

2、編寫markstat文件(.stmd)

注意:markstat使用{{n}}作為stata代碼的預(yù)留塊的標(biāo)記侧到,所以在編寫markstat文件時(shí)勃教,
不要使用雙大括號(hào)。

1)包含stata代碼的最簡單的文件

Stata代碼只需要縮進(jìn) 1個(gè)tab或4個(gè)空格匠抗。如下例:

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)數(shù)學(xué)公式

  1. 支持$ $ 行內(nèi)插入公式。
  2. 支持$$ $$ 插入公式塊矢腻。
  3. 輸出漂亮的公式门驾,建議執(zhí)行markstat命令時(shí)添加mathjax選項(xiàng)。
  4. 公式塊多柑,建議縮進(jìn)輸入公式奶是。不用擔(dān)心會(huì)和stata命令相混淆。
$$
    y = \alpha + \beta x + e
$$

輸出結(jié)果為:

y = \alpha + \beta x + e

4)Metadata 文件標(biāo)記

Pandoc支持文件的標(biāo)題竣灌、作者和日期作為metadata聂沙。

注意,必須在文件開頭第一行開始用%標(biāo)注相關(guān)信息初嘹。

例如:

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

5)代碼塊Fenced Code Blocks

前面提到用“1個(gè)tab或4個(gè)空格”的規(guī)則來區(qū)分STATA和Markdown的代碼及汉。

規(guī)范做法最好用代碼塊。

a) STATA代碼塊

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

或者

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

如果不返回命令

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

6)行內(nèi)代碼(Inline code)

行內(nèi)代碼的語法:

`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) `削樊。

如果要在行內(nèi)引用R代碼的結(jié)果豁生,語法類似為` r expression `。注意漫贞,這里沒有fmt選項(xiàng)甸箱。如果對(duì)結(jié)果格式化,可以使用round()函數(shù)迅脐。例如

    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選項(xiàng)設(shè)定。

默認(rèn)在HTML中使用圖片的實(shí)際尺寸谴蔑,在PDF中使用行寬的75%的尺寸豌骏。

Markdown連接中添加width選項(xiàng)龟梦,可以修改和設(shè)置圖片尺寸。有三種選擇:

  1. 使用in設(shè)定英寸寬度;
  2. 使用cm設(shè)定厘米寬度窃躲;
  3. 使用\%設(shè)定相對(duì)尺寸计贰。
    例如 :
![caption](filename.png){width=100%}  //設(shè)定圖片的相對(duì)寬度為100%,圖片將隨瀏覽器的大小而變化蒂窒。

8)文獻(xiàn)引用

由于使用Pandoc作為轉(zhuǎn)換引擎躁倒,markstat還可以處理參考文獻(xiàn)引用。

簡單來說洒琢,先為參考文獻(xiàn)創(chuàng)建一個(gè)BibTex數(shù)據(jù)庫文件秧秉,然后在markstat文件的Metadata行中包含對(duì)該數(shù)據(jù)庫文件的引用。詳細(xì)例子參見Citations說明衰抑。

例子

第一步象迎,創(chuàng)建BibTex數(shù)據(jù)庫,本例命名為markstat.bib呛踊。內(nèi)容如下:

% 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塊指定該數(shù)據(jù)庫文件。

---
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
---

第三步恋技,設(shè)定引用格式

markstat默認(rèn)的是 the Chicago Manual of Style author-date 格式拇舀。

文獻(xiàn)管理樣式庫(the Zotero Style Repository)中有8000多種文獻(xiàn)引用樣式逻族,可以從中選擇所需下載引用樣式語言(Citation Style Language)文件(.csl文件)蜻底,然后添加進(jìn)YAML塊的Metadata數(shù)據(jù)行中。

例如聘鳞,采用IEEE格式薄辅。

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

第四步,運(yùn)行markstat時(shí)添加bibliography選項(xiàng)抠璃。

9)幻燈片
還是由 于Pandoc站楚,markstat也支持生成幻燈片,在HTML顯示使用S5引擎搏嗡,在PDF中顯示使用Beamer窿春。

首先,必須在YAML metadata塊采盒,提供title旧乞,author和data,這些信息會(huì)顯示在幻燈片的首頁磅氨。

其次尺栖,在STATA和Markdown代碼中使用特定的語法來設(shè)定每張幻燈片。

  • 在一個(gè)簡單的PPT中烦租,level 1的每個(gè)標(biāo)題(heading)定義一個(gè)幻燈片延赌,然后是內(nèi)容除盏。內(nèi)容通常包括要點(diǎn)(Bullet points),以及使用Stata生成的圖和表挫以。
  • 在一個(gè)多部件PPT中者蠕,級(jí)別1的標(biāo)題(level1 heading)定義部件(parts)并生成標(biāo)題幻燈片頁(title slides),級(jí)別2的標(biāo)題(level2 heading)定義幻燈片掐松。Pandoc計(jì)算出幻燈片級(jí)別蠢棱,尋找最高級(jí)別的標(biāo)題,緊接著是內(nèi)容甩栈。
  • 如果PPT中包含圖片泻仙,可以用使用Mardown語法![title](source){width="60%"}來引用圖片。
  • 如果使用Beamer量没,要在包含STATA命令和輸出的幻燈片頁的標(biāo)題中(the heading of slides)添加{.fragile}玉转。

例子:

3、執(zhí)行markstat文件(.stmd)

STATA命令:

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末殴蹄,一起剝皮案震驚了整個(gè)濱河市究抓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌袭灯,老刑警劉巖刺下,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異稽荧,居然都是意外死亡橘茉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門姨丈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畅卓,“玉大人,你說我怎么就攤上這事蟋恬∥膛耍” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵歼争,是天一觀的道長拜马。 經(jīng)常有香客問我,道長沐绒,這世上最難降的妖魔是什么俩莽? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮洒沦,結(jié)果婚禮上豹绪,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好瞒津,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布蝉衣。 她就那樣靜靜地躺著,像睡著了一般巷蚪。 火紅的嫁衣襯著肌膚如雪病毡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天屁柏,我揣著相機(jī)與錄音啦膜,去河邊找鬼。 笑死淌喻,一個(gè)胖子當(dāng)著我的面吹牛僧家,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播裸删,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼八拱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了涯塔?” 一聲冷哼從身側(cè)響起肌稻,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎匕荸,沒想到半個(gè)月后爹谭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡榛搔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年诺凡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片药薯。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绑洛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出童本,到底是詐尸還是另有隱情,我是刑警寧澤脸候,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布穷娱,位于F島的核電站,受9級(jí)特大地震影響运沦,放射性物質(zhì)發(fā)生泄漏泵额。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一携添、第九天 我趴在偏房一處隱蔽的房頂上張望嫁盲。 院中可真熱鬧,春花似錦烈掠、人聲如沸羞秤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瘾蛋。三九已至俐镐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哺哼,已是汗流浹背佩抹。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留取董,地道東北人棍苹。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像茵汰,于是被迫代替她去往敵國和親廊勃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容