0

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

我想收集一些标量,例如几个变量(或回归输出,或测试统计,或 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,而是更长。

编辑:在评论中澄清之后,最直接的答案是在罗伯托斯编辑中。Ander2ed 的回答给出了直接编程问题的直觉。

4

2 回答 2

3

除了collapse@Roberto 的回答所建议的那样,我经常使用 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
于 2015-09-03T21:00:40.390 回答
2

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

一个荒谬的例子:

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非常灵活。只需阅读手册输入和实验。

于 2015-09-03T20:53:21.893 回答