以下示例数据包含描述多个玩家投注的变量。
如何计算每位玩家的首次投注类型,首次投注价格,足球投注数量,棒球投注数量,每位客户的独特价格数量以及每位用户的唯一投注类型数量?
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
答案 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 usertag
是if usertag == 1
的有用习惯用法。)
一些阅读建议:
在by:
http://www.stata-journal.com/sjpdf.html?articlenum=pr0004
在egen
:http://www.stata.com/help.cgi?egen
关于不同的观察(以及为什么单词"唯一"具有误导性):http://www.stata-journal.com/sjpdf.html?articlenum=dm0042