【发布时间】:2020-05-13 15:04:27
【问题描述】:
我会提前说,我不能在这里报告数据以保密,并且我修改了报告的收入数字,但也许有人可以帮助我发现以下代码的任何错误,或者告诉我 Stata 发生了什么.
我正在使用sum() 函数和generate 命令来获取属于特定集团的公司的年收入的累计总和,作为该集团年总收入的份额。
* 1) Derive the shares
sort Group year rev_Tot
by Group year: egen rev_Tot_group = total(rev_Tot)
replace rev_Tot_group = rev_Tot / rev_Tot_group
* 2) Compute the cumulative sum of the shares by group per year
by Group year: gen Roll_sum_rev_Tot_group = sum(rev_Tot_group)
drop rev_Tot_group
显然,到目前为止,一切都很好。然后我开始按组/年内的五分位数对观察结果进行分类 - 我只关心 3 组中的两组。
gen quintile = ""
replace quintile = "Group1 0.2" if Roll_sum_rev_Tot_group <= 0.2 & Group == "1"
replace quintile = "Group2 0.2" if Roll_sum_rev_Tot_group <= 0.2 & Group == "2"
replace quintile = "Group1 0.4" if Roll_sum_rev_Tot_group > 0.2 & Roll_sum_rev_Tot_group <= 0.4 & Group == "1"
replace quintile = "Group2 0.4" if Roll_sum_rev_Tot_group > 0.2 & Roll_sum_rev_Tot_group <= 0.4 & Group == "2"
replace quintile = "Group1 0.6" if Roll_sum_rev_Tot_group > 0.4 & Roll_sum_rev_Tot_group <= 0.6 & Group == "1"
replace quintile = "Group2 0.6" if Roll_sum_rev_Tot_group > 0.4 & Roll_sum_rev_Tot_group <= 0.6 & Group == "2"
replace quintile = "Group1 0.8" if Roll_sum_rev_Tot_group > 0.6 & Roll_sum_rev_Tot_group <= 0.8 & Group == "1"
replace quintile = "Group2 0.8" if Roll_sum_rev_Tot_group > 0.6 & Roll_sum_rev_Tot_group <= 0.8 & Group == "2"
replace quintile = "Group1 1" if Roll_sum_rev_Tot_group > 0.8 & Roll_sum_rev_Tot_group <= 1 & Group == "1"
replace quintile = "Group2 1" if Roll_sum_rev_Tot_group > 0.8 & Roll_sum_rev_Tot_group <= 1 & Group == "2"
replace quintile = "Whatever" if Group == "3"
在这一点上,我相信quintile 不应该有空值。但是,我发现一个观察结果仍然是空的:
count if quintile == ""
举报1。
因此,我浏览以查看围绕该观察结果的数据
br if quintile == ""
br
我看到的是累积和为 1,quantile 为空:
Group year rev_Tot Roll_sum_rev_Tot_group quintile
2 2018 37200 .993623 Group2 1
2 2018 37300 .995001 Group2 1
2 2018 43800 .996619 Group2 1
2 2018 45000 .998288 Group2 1
2 2018 46000 1
2 2019 0 0 Group2 0.2
2 2019 0 0 Group2 0.2
2 2019 0 0 Group2 0.2
我认为问题在于 Stata 从累积和变量中读取“1”的方式,因为
assert(Roll_sum_rev_Tot_group == 1) if quintile == ""
产量
assertion is false
r(9);
同时
assert(Roll_sum_rev_Tot_group != 1) if quintile == ""
不会产生任何错误。
但是,如果我在阅读模式下单击单元格,我看到它是一个整洁的 1。如果我通过制表检查,我又得到 1:
tab Roll_sum_rev_Tot_group if quintile == "",m
生产
Roll_sum_re |
v_Tot_group | Freq. Percent Cum.
------------+---------------------------
1 | 1 100.00 100.00
------------+---------------------------
Total | 1 100.00
这让我很困惑。有人可以帮助我了解发生了什么吗?当然,这对我来说是一个小问题,因为我可以继续分析,但有点担心我需要手动纠正这个问题。
谢谢。
【问题讨论】:
标签: stata cumulative-sum