连接线图,描述组的平均值,按类别划分

时间:2019-05-10 14:45:29

标签: plot graph line stata connect

我有一些数据,其中有两个rep78headroom两个变量。

我想取第三个变量的平均值,例如在每个weight + rep78单元内的headroom。对于每个headroom类别,我分别希望在x轴上用rep78绘制(连接点图)这些平均值。我想一种更直观的思考方式是将rep78替换为year,并将headroom替换为state

我已经可以通过下面的代码得到想要的东西:

sysuse auto2, clear
bys rep78 headroom: egen mean_w=mean(weight)
twoway  (scatter mean_w rep78 if headroom==1.5, connect(l)) ///
        (scatter mean_w rep78 if headroom==2.0, connect(l)) ///
        (scatter mean_w rep78 if headroom==2.5, connect(l)) ///
        (scatter mean_w rep78 if headroom==3.0, connect(l)) ///
        (scatter mean_w rep78 if headroom==3.5, connect(l)) ///
        (scatter mean_w rep78 if headroom==4.0, connect(l)) ///
        (scatter mean_w rep78 if headroom==4.5, connect(l)) ///
        (scatter mean_w rep78 if headroom==5.0, connect(l)), ///
        legend(label(1 "1.5") label(2 "2.0") label(3 "2.5") ///
              label(4 "3.0") label(5 "3.5") label(6 "4.0") ///
              label(7 "4.5") label(8 "5.0"))

但是,有没有更简单(即更短)的方法呢?

我可以简化这段代码的所有部分。

2 个答案:

答案 0 :(得分:3)

感谢MCVE!

您是正确的。这是获得相同图形的一种较短解决方案,它还可以对小细节进行模运算:

sepscatter mean_w rep78, sep(headroom) recast(connected) name(G2, replace) 

使用on Statalist宣布的来自SSC的sepscatter。使用sepscatter作为Statalist上的搜索词可以找到更多示例。

答案 1 :(得分:2)

我在这里看不到任何复杂的内容。

社区贡献的命令sepscatter是一个很好的包装器,但是如果您出于代码简洁性的考虑,还可以执行以下操作而无需安装任何东西:

sysuse auto2, clear
bysort rep78 headroom: egen mean_w=mean(weight)

levelsof headroom, local(head)

foreach x of local head {
    local scatterlist `scatterlist' (scatter mean_w rep78 if headroom == `x', connect(l))
}

twoway `scatterlist'

要缓解任何精度问题,如果未将变量生成为double变量,则可以使用float()

(scatter mean_w rep78 if headroom == float(`x'), connect(l))