1

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

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样式查询?

4

3 回答 3

11

这是比迄今为止建议的任何代码都短的代码:

  collapse average_income=income, by(state year) 
于 2013-08-06T01:41:37.467 回答
2

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

bysort year state: egen average_income = mean(income)

您也不必创建一个新数据集,您可以只修剪这个并保存它。首先只保留您想要的变量(状态、年份和平均收入)并消除重复项:

keep state year average_income
duplicates drop
save "mynewdataset.dta"
于 2013-08-05T23:33:19.850 回答
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;
于 2013-08-06T00:06:37.113 回答