【问题标题】:Extract the mean from svy mean result in Stata从Stata中的svy均值结果中提取均值
【发布时间】:2014-12-30 21:32:55
【问题描述】:

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

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

但是,我也想将此均值合并回villageid。我目前的想法是像这样提取矩阵villagemean 的行名:

local names : rownames villagemean

然后试着把这个宏names变成变量

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

但是,变量names 是空的。我做错什么了?由于很多是从Stata邮件列表中复制的,我特别不明白local names : rownames villagemean的含义。

【问题讨论】:

    标签: stata survey


    【解决方案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 用户指南 的初始章节,则必须阅读。

    【讨论】:

    • 感谢您的帮助。这正是我所需要的。您能否详细说明if sex == :word i' of levsex'', especially the :word` 部分?指向帮助页面的指针将不胜感激。 (还有如何知道首先要查看哪个帮助页面?help :wordhelp word 的一般做法没有帮助。
    • 我已经添加/修改了我的答案。它应该会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 2019-05-07
    相关资源
    最近更新 更多