我能够将均值提取到矩阵中,如下所示:
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
的含义。
答案 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用户指南的初始章节,那么您必须这样做。