我的数据中有以下列
企业 - 收入 - 行业 - 年
我想计算2008年至2015年期间每个行业的总收入变化百分比。
我试过了:
by industry: egen tot_2008 = sum(revenue) if year == 2008
by industry: egen tot_2015 = sum(revenue) if year == 2015
gen change = (tot_2015-tot_2008)/tot_2008
但这不起作用if
s限制egen
创造价值的年份以及每个总和中包含的年份。
答案 0 :(得分:1)
正如您所知,代码的问题在于,2008年和2015年的值将分别仅为这些年份的非缺失值,因此永远不会错过这两个变量。以下是为每个行业传播价值的一种方法:
by industry: egen tot_2008 = total(revenue / (year == 2008))
by industry: egen tot_2015 = total(revenue / (year == 2015))
gen change = (tot_2015-tot_2008)/tot_2008
这取决于year == 2008
等表达式,如果为真,则计算为1,如果为假则为0。如果除以0,结果将是一个缺失值,Stata将忽略该值,这正是您想要的。对行业中的所有观察结果进行总计确保为每个行业记录相同的值。
以下是另一种更明确的方法:
by industry: egen tot_2008 = total(cond(year == 2008, revenue, .))
by industry: egen tot_2015 = total(cond(year == 2015, revenue, .))
gen change = (tot_2015-tot_2008)/tot_2008
取决于相同的原则,将忽略错失。
请注意此处使用egen
函数total()
。 egen
函数sum()
仍然有效,并且功能相同,但该名称从Stata 9开始未记录,以避免与Stata函数sum()
混淆。
为避免双倍(实际上是多次)计数,请使用
egen tag = tag(industry)
为每个行业标记一个观察值,用于您想要的图表和表格。
有关讨论,请参阅here,第9和10节。