在数据子集内创建分位数哑变量时xtile与bysort报错求解决方案
解决Stata中
xtile无法结合bysort的报错问题 嗨,这个问题我之前也碰到过!你收到的xtile may not be combined with by r(190)报错,根源是Stata原生的xtile命令不支持bysort前缀——这是它的语法硬限制。不过别担心,我们有完美的替代方案,用egen命令的xtile函数就能实现你要的分组内生成分位数哑变量的需求,这个函数是支持bysort操作的。
修正后的代码
sysuse auto.dta, clear local outcomes mpg foreach outcome in `outcomes' { bysort foreign: egen `outcome'_qtile = xtile(`outcome'), n(4) }
关键说明
egen的xtile函数和原生xtile功能一致,但专门适配了分组场景:它会在每个foreign子组(国产车/进口车)内部独立计算mpg的四分位数,而不是全局计算后再分组,完全匹配你的需求。- 如果需要更精细的分位数控制(比如处理相同值的分配规则),还可以添加
pweight参数或者自定义cutpoints,基础的四分位数分组用上面的代码就足够了。
验证生成结果
你可以用以下命令检查分组内的分位数是否正确生成:
tab foreign mpg_qtile
这个命令会输出每个分组里mpg四分位数的分布情况,方便你确认结果是否符合预期。
内容的提问来源于stack exchange,提问作者amquack
相关产品推荐
相关产品推荐

