Stata:将矩阵转换为数据集而不丢失名称

Stata: convert a matrix to dataset without losing names

以前有人问过这个问题,但答案似乎不适用于此处。我想从我的回归输出中制作一个数据集,而不会丢失信息。考虑:

clear *
input str3 iso3 var1 var2 var3
GBR    10 13 15
USA    9 7 4
FRA    8 8 7
BEL    3 4 5
end

local vars var2 var3
reg var1 var2 var3
matrix A=r(table)
matrix list A

clear
xsvmat A, names(col) norestore

Stata 抱怨 _cons 列的地方。我对这个专栏不感兴趣(虽然我也不明白为什么包含它是个问题)但是我在 xsvmat、[=13= 中找不到解决这个问题的选项] 或 svmat2 帮助。

虽然 Stata 变量名通常可以以下划线开头 _[U] 11.3 命名约定 解释说 _cons 是保留名称,并且它们不能用作变量名。

我想你想要这个:

clear
set more off

input ///
str3 iso3 var1 var2 var3
GBR    10 13 15
USA    9 7 4
FRA    8 8 7
BEL    3 4 5
end

local vars var2 var3
reg var1 var2 var3

matrix A = r(table)

// get original row names of matrix (and row count)
local rownames : rowfullnames A
local c : word count `rownames'

// get original column names of matrix and substitute out _cons
local names : colfullnames A
local newnames : subinstr local names "_cons" "cons", word

// rename columns of matrix
matrix colnames A = `newnames'

// convert to dataset
clear
svmat A, names(col)

// add matrix row names to dataset
gen rownames = ""
forvalues i = 1/`c' {
    replace rownames = "`:word `i' of `rownames''" in `i'
}

// check
order rownames
list, sep(0)

使用了扩展宏函数。如果您不熟悉它们,请参阅 help extended_fcn

另见this answer,非常相似,建议postfilestatsby

最后,检查 ssc describe estout,如果您的目标是输出回归表。