哈喽,诸君安。自从我们公众号推出有问必答栏目,陆陆续续有很多朋友向我们投来自己的问题。我们本着有问必答的态度,认真对待每一个问题,并及时帮大家答疑解惑。近日,又有一位朋友提出一个问题,问题是酱婶的:
这是一个stata的作图问题,他要绘制
1978-1996
年全国不同省份大豆收购量和时间关系。
例如:
上图是吉林省1978-1996年大豆收购量的关系图。但是注意到左边
y
轴刻度是以
20
为起点,终值为
100
,现在问题是想让左边
y
轴起点从
0
开始,终点到该省大豆收购量最大值结束。但是每个省大豆收购量最大值是不同的;若修改的话只能每个省手动修改,这样耗时费力,还有可能出现错误。怎么办呢?接下来小编就带你解决这个问题。
鉴于没有提问者的数据,小编找了一个类似的面板数据进行解答,数据已放入百度云(http://pan.baidu.com/s/1kVAtimz),读者可自行下载。
clear
set more off
use d:/question_exam
这是一个非平衡的面板数据,为了方便观察,笔者选择了4个地区一段时间内的
GDP
。
数据有了,接下来对数据进行处理,我们的目的是把每个地区GDP的最大值作为
y
轴的终值,那么首先我们要找出每个地区
GDP
的最大值。
程序如下:
sort country year
by country: gen id=(_n==1)
replace id= sum(id) //生成id,是每一个国家对应一个id
replace GDP = GDP/1000000 //为了方便观察,把GDP除以1百万,相应的单位变为(百万美元)
bysort id :egen maxgdp=max(GDP) //得到每个国家GDP的最大值
结果如下:
这样我们就得到了每个地区GDP的最大值。接下来,开始做图!对多个地区分别作出相应的图标,我们可以利用循环。
我们先进行尝试,程序如下:
capture mkdir d:/statagraph/
forvalue i=1(1)4 {
gen maxgdp`i' = maxgdp if id ==`i'
graph twoway (bar GDP year, yaxis(1) barwidth(0.5) ylabel(0(`=maxgdp`i'/3')`=maxgdp`i'')) ///
(con GDP year, yaxis(2) ) if id == `i'
graph export "d:/statagraph/`i'.tif",replace
}
结果出现了错误:
我们再看一下程序,当进行第一次循环生成 maxgdp1时,条件是
id=1
,那么
id
不等于
1
的,都将变为缺失值。如下图:
在下边作图时,我们设定
ylabel(0(`=maxgdp`i'/3')`=maxgdp`i'')
,
因为
stata
把缺失值默认为无穷大,所以
ylabel
中将出现缺失值,程序无法继续运行。当然,我们想到可以把缺失值
drop
掉,可是缺失值所在的行也会一并的
drop
掉,我们将无法完成第二个图的绘制。相信经常关注我们公众号的朋友到了这里,会马上找到解决办法,那就是
preserve restore--stata
的起死回生之术。我们可以将这一命令写入循环中,使每一次循环结束,都还原一个完整的原始数据。(更多关于
preserve-restore
的命令,请查看推文
preserve restore——stata的起死回生之术
)
程序如下:
capture mkdir d:/statagraph/
forvalue i=1(1)4 {
preserve
gen maxgdp`i' = maxgdp if id ==`i'
drop if maxgdp`i' ==.
graph twoway (bar GDP year, yaxis(1) barwidth(0.5) ylabel(0(`=maxgdp`i'/3')`=maxgdp`i'')) ///
(con GDP year, yaxis(2) ) if id == `i'
graph export "d:/statagraph/`i'.tif",replace
restore
}
结果储存在d:/statagraph
可以看到这四幅图左边y轴的终值都为每个地区
GDP
的最大值。问题解决了!
以上就是今天小编与大家分享的全部内容了,如果各位看官喜欢今天的分享,不要吝啬您的打赏哦!~~想了解更多有关stata的小秘密,请继续关注我们的公众号哦,更多惊喜等着您!~~
编辑by谢慧蓉 徐苾雯
往期推文推荐:
1.
天路——chinafin与cntrade命令
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
长按二维码关注你懂哟!~~