Stata:第一次出现,带有变量的唯一出现的总和

时间:2014-03-25 21:09:25

标签: stata

以下示例数据包含描述多个玩家投注的变量。

如何计算每位玩家的首次投注类型,首次投注价格,足球投注数量,棒球投注数量,每位客户的独特价格数量以及每位用户的唯一投注类型数量?

clear
input str16 username str40 betdate stake str16 bettype betprice str16 sport
player1 "12NOV2008 12:04:33" 90 SGL 5 SOCCER
player1 "04NOV2008:09:03:44" 30 SGL 4  SOCCER
player2 "07NOV2008:14:03:33" 120 SGL 5 SOCCER
player1 "05NOV2008:09:00:00" 50 SGL 4 SOCCER
player1 "05NOV2008:09:05:00" 30 DBL 3 BASEBALL 
player1 "05NOV2008:09:00:05" 20 DBL 4 BASEBALL 
player2 "09NOV2008:10:05:10" 10 DBL 5 BASEBALL 
player2 "15NOV2008:15:05:33" 35 DBL 5 BASEBALL 
player1 "15NOV2008:15:05:33" 35 TBL 5 BASEBALL
player1 "15NOV2008:15:05:33" 35 SGL 4 BASEBALL
end

generate double timestamp=clock(betdate,"DMY hms") 
format timestamp %tc

generate double dateonly=date(betdate,"DMY hms") 
format dateonly %td

generate firsttype
generate firstprice
generate soccercount
generate baseballcount
generate uniquebettypecount
generate uniquebetpricecount

1 个答案:

答案 0 :(得分:3)

这有点接近保证金,因为"请给我代码"问题,没有尝试自己的解决方案。

第一种类型和价格是

bysort username (timestamp) : gen firsttype = bettype[1] 
bysort username (timestamp) : gen firstprice = betprice[1] 

足球和棒球投注的数量是

egen soccercount = total(sport == "SOCCER"), by(username) 
egen baseballcount = total(sport == "BASEBALL"), by(username) 

不同[不唯一!]投注类型的数量是

bysort username bettype : gen work = _n == 1 
egen uniquebettypecount = total(work), by(username) 

和另一个问题是一样的(但是replace work)。另一种方法是

egen work = tag(username bettype) 
egen uniquebettypecount = total(work), by(username) 

所有这些变量的特征是每个组内的所有值都重复相同的值。例如,firsttype对于每个不同的username的每次出现都具有相同的值。通常,您只想使用每个值一次。关键是刚刚使用的egen函数tag(),例如

egen usertag = tag(username) 

然后在需要时使用if usertag。 (if usertagif usertag == 1的有用习惯用法。)

一些阅读建议:

by: http://www.stata-journal.com/sjpdf.html?articlenum=pr0004

egenhttp://www.stata.com/help.cgi?egen

关于不同的观察(以及为什么单词"唯一"具有误导性):http://www.stata-journal.com/sjpdf.html?articlenum=dm0042