You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Stata中如何为Steam硬核/休闲玩家子组正确聚合总游戏时长?

解决Stata中按玩家类型聚合总游戏时长的问题

问题原因

你当前使用的egen playtime_type = sum(playtime_sum), by(hightype)结果不符合预期,核心问题是数据集存在重复的用户记录:同一个steamid(用户)对应多条游戏记录,且每条记录的playtime_sum是该用户的总游戏时长(而非单游戏时长),直接求和会重复计算同一用户的时长,导致分组总和被错误放大。

比如你的示例中,用户76561197960265730出现3次,每次playtime_sum都是45,原命令会把45累加3次,但实际上该用户的总时长只应统计1次。

解决方法

根据你的数据结构,提供两种可行方案:

方案1:先去重再计算分组总和

先保留每个用户的唯一记录(同一用户的playtime_sum和hightype一致),再按玩家类型求和:

// 去除重复的用户记录,保留每个steamid的唯一行
duplicates drop steamid, force

// 为每条记录生成对应玩家类型的总时长(保留原数据结构)
egen total_playtime_by_type = sum(playtime_sum), by(hightype)

// 或者直接生成仅包含分组总和的汇总表(若不需要原数据)
collapse (sum) total_playtime=playtime_sum, by(hightype)

方案2:先计算用户总时长再分组求和(若playtime_sum是单游戏时长)

如果playtime_sum是单游戏的游玩时长(而非用户总时长),需要先计算每个用户的总时长,再按玩家类型聚合:

// 计算每个用户的总游戏时长
bysort steamid: egen user_total_playtime = sum(playtime_sum)

// 去除重复用户记录
duplicates drop steamid, force

// 按玩家类型求和(保留原数据结构)
egen total_playtime_by_type = sum(user_total_playtime), by(hightype)

// 或者直接生成汇总表
bysort steamid: egen user_total_playtime = sum(playtime_sum)
collapse (sum) total_playtime=user_total_playtime, by(hightype)

验证结果

以你的示例数据为例,方案1执行后,hightype=0的总时长应为0 + 45 + 1710 + 11 = 1766,这才是该类型玩家的真实总游戏时长总和。

内容的提问来源于stack exchange,提问作者Ji Xu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 04:50:12