Stata:将标量(例如测试统计数据)收集到一个对象中

Stata: collect scalars (eg test statistics) into one object

这应该很容易,但我找不到好的答案:

我想收集一些标量,例如几个变量的均值(或回归输出,或测试统计,或 p 值),到一个对象中用于绘图或作为变量等。

考虑这样一个数据集:

clear
input str3 iso3 var1 var2 var3
GBR    10 13 12
USA    9 7 4
FRA    8 8 7
end

假设我从一个循环中得到了我想要收集的标量:

foreach i in var1 var2 var3{
mean `i'
matrix A= r(table)
scalar s_`i'= A[1,1]
}

现在我可以 display s_var1 例如,但是我如何获得一个对象,它只是给我 [9, 9.3333, 7.6666] 用于绘图或作为变量?理想情况下不会丢失原始数据集?当然,我的实际数据集不是 3x3,而是更长。

编辑: 在评论中澄清后,最直接的答案是在 Robertos 编辑中。 Ander2ed 的回答给出了直接对问题进行编程的直觉。

设置数据以创建图表最终取决于数据集的结构、所需的计算、(可能)数据集的大小以及图表的类型。

一个荒谬的例子:

clear
input str3 iso3 var1 var2 var3
GBR    10 13 12
USA    9 7 4
FRA    8 8 7
end

preserve

collapse var*

gen i = _n
reshape long var, i(i)

graph twoway line var _j

restore

collapse 这里是一些计算的例子,但它可以是任何东西。我使用 preserverestore 轻松返回到原始数据。这可能是也可能不是最好的方法,但正如我之前提到的,这实际上取决于手头的问题。

编辑

针对您的评论,您可能想要 postfile。一个例子(大部分来自手册):

clear
set more off

*----- example data -----

input str3 iso3 var1 var2 var3
GBR    10 13 12
USA    9 7 4
FRA    8 8 7
end

*----- what you want -----

tempfile results

tempname sim
postfile `sim' mean var using `results', replace
quietly {
    foreach v of varlist var? {
        summarize `v'
        post `sim' (r(mean)) (r(Var))
    }
}
postclose `sim'
list // original ok

use `results', clear
list // results to graph

postfile 非常灵活。只需阅读手册条目并进行实验。

除了@Roberto 的回答所建议的 collapse 之外,我还经常使用 Stata 的 matrix 语言,尤其是 svmat 来完成类似的任务。我认为这是一个偏好问题(尽管 collapse 可能更直接)所以我认为值得在一个单独的、荒谬的例子中提及:

clear *
input str3 iso3 var1 var2 var3
GBR    10 13 12
USA    9 7 4
FRA    8 8 7
end

mean var1 - var3
mat A = (r(table))'

preserve
clear

svmat A, names(matcol)
rename A* *

// Build Plots Here
twoway scatter t pvalue, name(plot1)

restore

graph display plot1