1.引言
如题,想用for循环批量输出结果,输出标题/label一般暂时使用数值,但结果不太直观。如何将数值对应的文字作为label或title?
我们考虑以下场景,hy2是国民经济行业分类代码。现在想要绘制每一个行业的出口额的时间趋势图。
hy2 | hy中文名 | hy2 | hy中文名 |
---|---|---|---|
13 | 农副食品加工业 | 29 | 橡胶和塑料制品业 |
14 | 食品制造业 | 30 | 非金属矿物制品业 |
15 | 酒、饮料和精制茶制造业 | 31 | 黑色金属冶炼和压延加工业 |
16 | 烟草制品业 | 32 | 有色金属冶炼和压延加工业 |
17 | 纺织业 | 33 | 金属制品业 |
18 | 纺织服装、服饰业 | 34 | 通用设备制造业 |
19 | 皮革、毛皮、羽毛及其制品和制鞋业 | 35 | 专用设备制造业 |
20 | 木材加工和木、竹、藤、棕、草制品业 | 36 | 汽车制造业 |
21 | 家具制造业 | 37 | 铁路、船舶、航空航天和其他运输设备制造业 |
22 | 造纸和纸制品业 | 39 | 计算机、通信和其他电子设备制造业 |
23 | 印刷和记录媒介复制业 | 40 | 仪器仪表制造业 |
24 | 文教、工美、体育和娱乐用品制造业 | 41 | 其他制造业 |
25 | 石油、煤炭及其他燃料加工业 | 42 | 废弃资源综合利用业 |
26 | 化学原料和化学制品制造业 | 43 | 金属制品、机械和设备修理业 |
27 | 医药制造业 | 44 | 电力、热力生产和供应业 |
28 | 化学纤维制造业 | 45 | 燃气生产和供应业 |
我们要做的是:将贸易额回归至时间虚拟变量上,考察lnv的时间趋势,使用如下命令
- 回归命令
*****回归*****
capture{
forv i = 13/45{
reghdfe lnv i.year if hy2 == `i', noa vce(r)
eststo fit`i'
}
}
- 画图命令
*****画图*****
forv i = 39/45{
#d ;
coefplot
(fit`i',c(l) label("行业`i'") lp(dash) lc(black) mc(black) ms(smcircle_hollow) offset(-0.07))
, vertical
drop(_cons) byopts(xrescale)
xlabel(1 "2008" 2"2009" 3"2010" 4"2011" 5"2012" 6"2013" 7"2014" 8"2015")
graphregion(color(white))
legend(size(small) col(3))
;
#d cr
graph export "C:\Users\Allen\Desktop\output_temp\hy`i'.png", as(png) name("Graph") replace
}
如果直接循环绘制时间趋势图,得到如下图结果。发现label是数字,不太直观。
我们想要用中文标注:结果如下
如何把数字对应的行业”文字“作为label加到图中?
2.数据处理过程
(1)使用标量储存行业代码和行业名称
preserve
keep hy2*
duplicates drop hy2,force
global length = _N
forv i = 1/$length {
local j = hy2 in `i'
su hy2 in `i',d
sca int`j' = r(mean)
sca s`j' = hy2_name in `i'
}
restore
生成了标量s13~s45 用于储存行业代码编号
生成了标量int13~int45 储存行业代码名称
执行上述代码,sca list得到如下结果
(2)记录行业代码的首尾
su hy2,d
global lower_hy2 = r(min)
su hy2,d
global upper_hy2 = r(max)
(3)循环回归,并保存结果
forv i = $lower_hy2/$upper_hy2{
cap reghdfe lnv i.year if hy2 == `i', noa vce(r)
cap eststo fit`i'
}
(4)循环画图
forv i = $lower_hy2/$upper_hy2{
cap local hy = int`i'
cap local gamma = s`i'
capture{
#d ;
coefplot
(fit`i',c(l) label(`hy':`gamma') lp(dash) lc(black) mc(black) ms(smcircle_hollow) offset(-0.07))
, vertical
drop(_cons) byopts(xrescale)
xlabel(1 "2008" 2"2009" 3"2010" 4"2011" 5"2012" 6"2013" 7"2014" 8"2015")
graphregion(color(white))
legend(size(small) col(3))
;
#d cr
graph export "$path_output\hy`i'_`gamma'.png", as(png) name("Graph") replace
}
}
由此,我们就得到了中文label的时间趋势图