...并添加差异和 t 统计量列。
我学会了如何通过分位数均值表制作分位数以及如何添加差异的列/行 here (感谢@lejohn)。
现在,我希望每一行都是一个不同的变量,并且每个单元格将是落入给定分位数的每一列中的个体的每个变量的平均值,而不是将每一行作为一个变量的一个分位数变量。
我可以使用 tabstat
轻松计算单元格条目,但我想要行中的变量和列中的分位数(tabstat
生成转置)。我还希望能够区分列(如我的第一个问题)并计算单元格差异的 t 统计量。
我觉得中间步骤是 reshape
为包含三列的长数据:id(此处为acc_d)、变量名称和变量值。但我不知道如何做到这一点,并且我可能陷入 R 范式中。
这是我想要制作的类型表的示例
这是我一直在(不成功)修改的一些代码
* generate data
clear
set obs 2000
generate acc = rnormal()
generate r1 = rnormal()
generate sar1 = rnormal()
generate arbrisk = rnormal()
* generate quantiles for for a and b
xtile acc_d = acc, nquantiles(10)
* form table (at least my attempts)
* w/ tabstat (but transposed and can't manipulate columns)
tabstat acc r1 sar1 arbrisk, stat(mean) by(acc_d) nototal
* my attempts to reshape fail, but I would want something like to following to use tabulate
* acc_d variable value
* 1 acc 0.01
* 1 r1 1.03
* 1 sar1 -0.03
* 1 arbrisk 0.05
* 2 acc 1.01
* 2 r1 2.03
* 2 sar1 0.03
* 2 arbrisk 1.05
谢谢!
最佳答案
在这里我会采取一些不同的方式。我首先会收集计算差异和 t 统计量所需的信息
foreach v of varlist acc r1 sar1 arbrisk {
summarize `v' if acc_d == 1
local m_`v'_1 = r(mean)
local var_`v'_1 = r(Var)
local n_`v'_1 = r(N)
summarize `v' if acc_d == 10
local m_`v'_10 = r(mean)
local var_`v'_10 = r(Var)
local n_`v'_10 = r(N)
}
然后我将继续折叠和转置数据
collapse (mean) acc r1 sar1 arbrisk, by(acc_d)
xpose, clear varname
drop if _varname == "acc_d"
order _varname
forvalues n = 1 / 10 {
rename v`n' acc_d`n'
}
在最后一步中,我将添加差异和 t 统计量:
generate diff_d10_d1 = .
generate tstat_d10_d1 = .
foreach v in acc r1 sar1 arbrisk {
replace diff = `m_`v'_10' - `m_`v'_1' if _varname == "`v'"
replace tstat = (`m_`v'_10' - `m_`v'_1') / sqrt((`var_`v'_10'/`n_`v'_10') + (`var_`v'_1'/`n_`v'_1')) if _varname == "`v'"
}
最后打印结果:
list, abb(12) noobs
希望这有帮助。
关于reshape - 在 Stata 中生成行中变量和列中给定变量的分位数的均值表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7855481/