在我的数据集中,我观察了足球比赛。我的一个变数是hometeam
。现在我想要得到每hometeam
的平均观测量。我如何在Stata中做到这一点?如何获得每组平均观察次数?
我知道我可以tab hometeam
,但由于有超过500个不同的hometeams,我不想手动进行计算。
在我的数据集中,我观察了足球比赛。我的一个变数是hometeam
。现在我想要得到每hometeam
的平均观测量。我如何在Stata中做到这一点?如何获得每组平均观察次数?
我知道我可以tab hometeam
,但由于有超过500个不同的hometeams,我不想手动进行计算。
bysort hometeam : gen n = _N
bysort hometeam : gen tag = _n == 1
su n if tag
EDIT另一种方式来做到这一点更简洁
bysort hometown : gen n = _N if _n == 1
su n
为什么标记呢?当您在个人和组级别之间来回移动时,有一个标记变量通常很有用。 egen, tag()
做同样的事情。
为什么if _n == 1
?你只需要为每个组设置一次这个值,并且有两种方法可以用于小组只能观察一次的小组,以便在组中进行第一次或最后一次观察。在一组1中,它们是相同的,但这并不重要。所以if _n == _N
是另一种方法。
bysort hometown : gen n = _N if _n == _N
代码需要在你不需要的一些变量
bysort hometown : gen n = sum(!missing(myvar))
by hometown : replace n = . if _n < _N
egen, count()
类似于算missings,但并不相同的情况下进行更改。
我假设你可以用一些id
变量来识别不同的hometeam
。
如果你想每id
观测的平均数量,这是一个办法:
clear all
set more off
input id hometeam
1 .
1 5
1 0
3 6
3 2
3 1
3 9
2 7
2 7
end
list, sepby(id)
bysort id: egen c = count(hometeam)
by id: keep if _n == 1
summarize c, meanonly
disp r(mean)
注意与missings意见不被count
计数。如果你确实想算missings,那么你可以做:
bysort id: gen c = _n
by id: keep if _n == _N
summarize c, meanonly
disp r(mean)
选项2:使用@Roberto
的数据collapse (count) hometeam, by(id)
sum hometeam,meanonly
谢谢,这是有效的。但是,我认为有一些解决方案不需要删除观测值会很好。 – bonifaz
不客气。 @NickCox给出了一个答案。他的'hometeam'变量是我的'id'。基本上,而不是使用'keep','generate'一个'tag'变量,用它可以调整'summarize'。 –