如何编写最佳的数据聚合代码?

时间:2013-08-05 22:35:04

标签: stata

我有以下数据集(个人级别数据):

pid  year state income
1    2000  il    100
2    2000  ms    200
3    2000  al     30
4    2000  dc    400
5    2000  ri    205
1    2001  il    120
2    2001  ms    230
3    2001  al     50
4    2001  dc    400
5    2001  ri    235
.........etc.......

我需要估算每个州每年的平均收入and创建一个如下所示的新数据集:

state   year   average_income
ar      2000      150
ar      2001      200
ar      2002      250
il      2000      150
il      2001      160
il      2002      160
...........etc...............

我已经有一个运行完全正常的代码(我有两个循环)。但是,我想知道有没有更好的方式在Stata中像sql样式查询?

3 个答案:

答案 0 :(得分:11)

这是比目前为止建议的更短的代码:

  collapse average_income=income, by(state year) 

答案 1 :(得分:2)

这不应该需要2个循环,或任何相关的循环。实际上有更有效的方法来做到这一点。当您在许多组上重复操作时,bysort命令很有用:

bysort year state: egen average_income = mean(income)

您也不必创建新数据集,只需修剪此数据集并保存即可。首先只保留你想要的变量(state,year和average_income)并删除重复项:

keep state year average_income
duplicates drop
save "mynewdataset.dta"

答案 2 :(得分:1)

您在问题上有SQL标记。这是SQL中的基本聚合查询:

select state, year, avg(income) as average_income
from t
group by state, year;

将它放在表中,取决于您的数据库。以下之一通常有效:

create table NewTable as
    select state, year, avg(income) as average_income
    from t
    group by state, year;

或者:

select state, year, avg(income) as average_income
into NewTable
from t
group by state, year;