这应该很容易,但我找不到一个好的答案:
我想收集一些标量,例如几个变量(或回归输出,或测试统计数据或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 Edit。 Ander2ed的回答让人直接对问题进行编程。
答案 0 :(得分:3)
除了@ 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
答案 1 :(得分:2)
设置数据以创建图表最终取决于数据集的结构,所需的计算,(可能)数据集的大小以及图表的类型。
一个荒谬的例子:
{foreach from=$occupations item=ov key=ok}
{foreach from=$columns[$ov]}
do something
{/foreach}
{/foreach}
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
和preserve
轻松返回原始数据。这可能是也可能不是最好的方法,但正如我之前提到的,它实际上取决于手头的问题。
在回复您的评论时,您可能需要restore
。一个例子(几乎来自手册):
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
非常灵活。只需阅读手册输入和实验。