例如,当您在 Stata 中获取变量的百分位数时。
*set directory
cd"C:\Etc\Etc Etc\"
*open data file
use "dataset.dta",clear
*get centiles
centile var1, centile(1,5(5)95,99)
有没有办法将生成的百分位表记录到Excel中?百分位值存储在 r(c_#) 中,其中 # 表示您想要数据所在的百分位。但我需要所有百分位数的值向量,或多或少与输出窗口中显示的值相同。
我尝试使用 foreach 循环将百分位数转换为向量,如下所示:
*Create column of centiles
foreach i in r(centiles) {
xx[1,`i']=r(c_`i')
}
没有成功。
谢谢
编辑:
我后来发现这很有效:
matrix X = 0,0
forvalues i=1/21 {
matrix X = `i',round(r(c_`i'),.001)\ X
}
唯一的不便是 1) 我必须在输出中包含第一行 0,0,然后我将删除它。 2) 在本例中,我有 21 个百分位,但如果我想更改它,最好能自动计算百分位数,例如如下所示:
forvalues i=1/r(n_cent) {
matrix X = `i',round(r(c_`i'),.001)\ X
}
但是“i=1/r(n_cent)”是无效语法。任何有关我如何克服这两个不便的建议将不胜感激。
谢谢
最佳答案
您可以使用以下语法。
加载一些数据并计算百分位数。
sysuse auto, clear
centile price, centile(1,5(5)95,99)
必须初始化应该包含结果的矩阵。该矩阵称为X
。它的行数与通过 centile
命令请求的百分位数一样多。它有两列。在此阶段,矩阵中填充有零。
matrix X = J(`=wordcount("`r(centiles)'")', 2, 0)
以下循环逐步执行centile
命令的结果,并用适当的结果替换矩阵X
中的零。矩阵的第一列包含百分位数 (1, 5, 10, ...),第二列包含结果
forvalues i = 1 / `=wordcount("`r(centiles)'")' {
local cent: word `i' of `r(centiles)'
matrix X[`i', 1] = `cent'
matrix X[`i', 2] = r(c_`i')
}
打印结果:
matrix list X
关于excel - 用 stata 循环填充输出向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10096296/