如果缺少值,则按子组删除-tabstat-的摘要统计信息

时间:2015-09-21 09:38:37

标签: latex stata

我正在编写一个代码,使用tabstat, by()esttab在Latex中导出摘要统计信息表。

这里有一个玩具示例,它复制了我的数据结构:

cls
clear all
set more off

use auto, clear

// Create two groups to be used in the -by()- option
gen rep2="First dataset" if rep78>=3
replace rep2="Second dataset" if rep78<3 

// Recode "price" as completely missing in the first group
replace price=. if rep2=="First dataset"  

// Table
eststo: estpost tabstat weight price mpg trunk, ///
    column(statistics) statistics(count mean median sd) by(rep2) nototal

local sum_statistics "count(label(Observations)) mean(label(Mean) fmt(2)) p50(label(Median)) sd(label(Standard deviation) fmt(2))"

esttab using "table1.tex", replace type ///
    title("Summary Statistics")  ///
    cells("`sum_statistics'") ///   
    noobs nonum booktabs

输出将摘要统计信息显示在两个子表中,每个子表对应一个数据集(由rep2定义)。这两个数据集不一定具有相同的变量:第一个数据集中完全缺少price

我想完全省略price的“第一个数据集”的摘要统计行(将其留给“第二个数据集”)。 这是因为“第一个数据集”缺少变量price,因此其所有摘要统计信息都是缺失值。 如果“Observations”在特定的分组中等于0,则相当于省略整行摘要统计。

我查看了tabstat的文档,但我不太清楚如何继续。我是否必须使用drop()的{​​{1}}选项?

非常感谢,S

1 个答案:

答案 0 :(得分:3)

如您所述,您可以使用drop()选项:

clear all
set more off

sysuse auto, clear

// Create two groups to be used in the -by()- option
gen rep2="First" if rep78>=3
replace rep2="Second" if rep78<3 

// Recode "price" as completely missing in the first group
replace price=. if rep2=="First dataset"  

// Table
eststo: estpost tabstat weight price mpg trunk, ///
    column(statistics) statistics(count mean median sd) by(rep2) nototal

local sum_statistics "count(label(Observations)) mean(label(Mean) fmt(2)) p50(label(Median)) sd(label(Standard deviation) fmt(2))"

esttab, replace type ///
    title("Summary Statistics")  ///
    cells("`sum_statistics'") ///   
    noobs nonum booktabs drop(First:price)

这涉及使用全名而不仅仅是变量名称。

注意我在分组变量的值中取出了空格。在致电esttab时,这似乎很麻烦,但我留给你探索。