从Stata的svy平均结果中提取均值

时间:2014-12-30 21:32:56

标签: stata survey

我能够将均值提取到矩阵中,如下所示:

svy: mean age, over(villageid)
matrix villagemean = e(b)'
clear
svmat village

但是,我也想将这个意思合并回villageid。我目前的想法是提取矩阵villagemean的rownames,如下所示:

local names : rownames villagemean

然后尝试将此宏names变为变量

foreach v in names {
    gen `v' = "``v''"
}

但是,变量names为空。我做错了什么?由于很多内容是从Stata邮件列表中复制的,因此我特别理解local names : rownames villagemean的含义。

1 个答案:

答案 0 :(得分:1)

我并不完全清楚你想要什么,但我认为这可能就是这样:

clear
set more off

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

webuse nhanes2f

svyset [pweight=finalwgt]
svy: mean zinc, over(sex)

matrix eb = e(b)

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

levelsof sex, local(levsex)
local wc: word count `levsex'

gen avgsex = .
forvalues i = 1/`wc' {
    replace avgsex = eb[1,`i'] if sex == `:word `i' of `levsex''
}

list sex zinc avgsex in 1/10

我使用了两个扩展宏功能

local wc: word count `levsex'

`:word `i' of `levsex''

第一个返回字符串中的单词数;第二个返回字符串的第n个标记。扩展宏函数的help条目为help extended_fcn。更好的是,阅读手册,从:[U] 18.3 Macros开始。你会看到我(18.3.8)使用缩写形式。

原始帖子上的一些注释

你的循环没有做你想要的事情(虽然对我来说不是很清楚),因为你提供了一个列表(有一个元素:文本 name )。你可以看到它在运行和比较:

local names 1 2 3

foreach v in names {
    display "`v'"
}

foreach v in `names' {
    display "`v'"
}

foreach v of local names {
    display "`v'"
}

您需要阅读相应的help文件才能设置该权限。

至于原帖中的问题,: rownames是另一个扩展宏函数,但是对于矩阵。见help matrix,#11。

我的印象是,对于你想要达到的目标,你需要深入研究手册。此外,如果您还没有阅读 Stata用户指南的初始章节,那么您必须这样做。