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

时间:2015-09-03 20:12:59

标签: stata scalar postfile

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

我想收集一些标量,例如几个变量(或回归输出,或测试统计数据或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的回答让人直接对问题进行编程。

2 个答案:

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

修改

在回复您的评论时,您可能需要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 非常灵活。只需阅读手册输入和实验。