我有以下数据集(个人级别数据):
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样式查询?
答案 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;