loops - 在 Stata 中附加本地宏

标签 loops stata stata-macros

在 Stata 中,我想探索具有不同因变量和自变量的多种组合的回归。

为此,我决定使用一个循环来完成所有这些回归,然后以简洁方便的形式将相关结果(系数、R2 等)保存在矩阵中。

对于这个矩阵,我想命名行和列以便于阅读。

到目前为止,这是我的代码:

clear
sysuse auto.dta
set more off

scalar i = 1

foreach v in price mpg {
foreach w in weight length {

    quietly: reg `v' `w' foreign

local result_`v'_`w'_b = _b[`w']
local result_`v'_`w'_t = ( _b[`w'] / _se[`w'] )
local result_`v'_`w'_r2 = e(r2)

if scalar(i) == 1 {
mat A = `result_`v'_`w'_b', `result_`v'_`w'_t', `result_`v'_`w'_r2'
local rownms: var label `v'
}
if i > 1 {
mat A = A \ [`result_`v'_`w'_b', `result_`v'_`w'_t', `result_`v'_`w'_r2']
*local rownms: `rownms' "var label `v'"
}

scalar i = i+1

}
}

mat coln A = b t r2
mat rown A = `rownms'

matrix list A

它将给出如下所示的结果矩阵 A:

. matrix list A

A[4,3]
                b           t          r2
Price   3.3207368   8.3882744    .4989396
Price   90.212391   5.6974982   .31538316
Price  -.00658789  -10.340218   .66270291
Price  -.22001836  -9.7510366   .63866239

显然,还有一些事情还没有完全完成。矩阵的行名称应该是“price, price, mpg, mpg”,因为这是四个回归中的因变量。

在上面的代码中,考虑现在被注释掉的行

*local rownms: `rownms' "var label `v'"

它被注释掉了,因为在当前的形式中,它给出了一个错误。

我希望在每次迭代时将变量的标签(或名称)附加到本地宏 rownms,生成 Price Price Mileage (MPG) Mileage (MPG) .

但我似乎无法正确地为宏附加当前变量的标签。

最佳答案

矩阵的行名和列名在它们可以容纳的范围内是有限的。一般来说,变量标签不是很合适。

这是一些更简单的代码。

sysuse auto.dta, clear 

matrix drop A 
local rownms 

foreach v in price mpg {
    foreach w in weight length {
        quietly: reg `v' `w' foreign
        mat A = nullmat(A) \ (_b[`w'], _b[`w']/_se[`w'],  e(r2))  
        local rownms `rownms' `v':`w'
    }
}

mat coln A = b t r2
mat rown A = `rownms'

matrix list A

注意事项:

  1. nullmat() 技巧消除了在第一次和以后运行时对代码分支的需要。

  2. 不需要将结果放入local,然后再取出。要改掉这个习惯,请想想这个类比。你手里拿着一支笔。你把它放在一个盒子里。你再拿出来。现在你手里拿着一支笔。如果你不需要,为什么要做盒子的事情?

这适用于您的示例,但结果不是很好。

 local rownms `rownms' "`: var label `v''" 

关于loops - 在 Stata 中附加本地宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43914960/

相关文章:

java - 如何循环遍历数组并从 ArrayList 创建子字符串?

c++ - 从文本文件读取以显示给多个联系人

loops - Haskell 迭代参数类型不匹配,为什么?

R:读取.dta文件并仅使用选定变量的值标签来创建因子

excel - 用 stata 循环填充输出向量

loops - 在本地宏中使用通配符循环变量

Stata:基于本地变量列表创建变量

regex - 如何从宏中提取唯一字符串?

c# - 是否可以将 Func<bool> 作为 while 条件

r - Stata 到 R 根据条件替换值