当您在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循环将centile放入向量中,如下所示:
*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,0,然后我将丢弃。 2)在这种情况下,我有21个百分位,但如果我想要改变它,自动化百分位数会很好,例如:
forvalues i=1/r(n_cent) {
matrix X = `i',round(r(c_`i'),.001)\ X
}
但是“i = 1 / r(n_cent)”是无效的语法。关于如何克服这两个不便之处的任何建议都将不胜感激。
由于
答案 0 :(得分:1)
您可以使用以下语法。
加载一些数据并计算百分位数。
sysuse auto, clear
centile price, centile(1,5(5)95,99)
必须初始化应该包含结果的矩阵。该矩阵称为X
。它具有与通过centile
命令请求的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
答案 1 :(得分:0)
如果您使用的是round()
,那么您可能会做错事。故意丢失数据精确度的理由很少;您始终可以使用format
这种方式显示任意数量的数字(应用于数据,或作为list
或matrix list
的选项)。
我写了epctile
命令,它将百分位数作为估计命令返回,即在e(b)
向量中。这可以立即使用; findit epctile
下载。
您可以按如下方式修改提案:
local thenumlist 1, 5(5)95, 99
centile variable, centile(`thenumlist')
forvalues i=1/`=r(n_cent)' {
matrix X = nullmat(X) \ r(c_`i')
}
numlist "`thenumlist'"
matrix rownames X = `r(numlist)'
matrix list X, format(%9.3f)