Stata 在数据子集内创建分位数假人

Stata 在数据子集内创建分位数假人,stata,quantile,Stata,Quantile,我正在尝试在我的数据组中创建性能的分位数 在此过程中,我使用xtile命令: sysuse auto.dta local outcomes mpg foreach outcome in `outcomes' { bysort foreign : xtile `outcome'_qtile = `outcome', n(4) } 但是,我得到以下错误: xtile may not be combined with by r(190); 有解决方法吗?您可以执行以下操作: clear s

我正在尝试在我的数据组中创建性能的
分位数

在此过程中,我使用
xtile
命令:

sysuse auto.dta
local outcomes mpg
foreach outcome in `outcomes' {
    bysort foreign : xtile `outcome'_qtile = `outcome', n(4)
}
但是,我得到以下错误:

xtile may not be combined with by
r(190);

有解决方法吗?

您可以执行以下操作:

clear
sysuse auto.dta

egen group = group(foreign)
summarize group

local outcomes mpg
foreach outcome in `outcomes' {
    generate `outcome'_qtile = .
    forvalues i = 1 / `r(max)' {
        xtile temp_`outcome'_qtile = `outcome' if group == `i', n(4)
        replace `outcome'_qtile = temp_`outcome'_qtile if group == `i'
        drop temp_`outcome'_qtile
    }
}

您可以执行以下操作:

clear
sysuse auto.dta

egen group = group(foreign)
summarize group

local outcomes mpg
foreach outcome in `outcomes' {
    generate `outcome'_qtile = .
    forvalues i = 1 / `r(max)' {
        xtile temp_`outcome'_qtile = `outcome' if group == `i', n(4)
        replace `outcome'_qtile = temp_`outcome'_qtile if group == `i'
        drop temp_`outcome'_qtile
    }
}

不需要在一个项目上循环。另请注意
xtile()
来自
egenmore
(SSC)。我之所以使用循环,是因为我正在处理的数据中有多个结果,但可能由于其包含在上述代码中而增加了额外和不必要的复杂性。我将看一看xtile()和egenmore-谢谢!你仍然需要一个多结果的循环
xtile()
绕过了使用
by
的限制:响应中没有缺失值和关联:
bysort-foreign(结果):gen-xtile=ceil(4*\n/\n)
就足够了。不需要精确地在一个项目上循环。另请注意
xtile()
来自
egenmore
(SSC)。我之所以使用循环,是因为我正在处理的数据中有多个结果,但可能由于其包含在上述代码中而增加了额外和不必要的复杂性。我将看一看xtile()和egenmore-谢谢!你仍然需要一个多结果的循环
xtile()
绕过了使用
by
的限制:响应中没有缺失值和关联:
bysort-foreign(结果):gen xtile=ceil(4*\n/\n)
就足够了。