【问题标题】:Filling up an output vector with stata loop用stata循环填充输出向量
【发布时间】:2012-04-23 04:31:57
【问题描述】:

例如,当您在 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)”是无效的语法。任何关于如何克服这两个不便的建议将不胜感激。

谢谢

【问题讨论】:

    标签: excel loops foreach stata percentile


    【解决方案1】:

    如果您使用的是round(),您可能做错了什么。故意丢失数据精度的原因很少;您始终可以以这种或其他方式使用format 显示任意数量的数字(应用于数据,或作为listmatrix list 的选项)。

    1. 我编写了epctile 命令,它返回百分位数作为估计命令,即在e(b) 向量中。这可以立即使用; findit epctile 下载。

    2. 您可以按如下方式修改您的提案:

      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)
      

    【讨论】:

      【解决方案2】:

      您可以使用以下语法。

      加载一些数据并计算百分位数。

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-14
        • 2022-07-06
        • 2020-04-07
        • 1970-01-01
        • 1970-01-01
        • 2010-10-22
        相关资源
        最近更新 更多