我想创建多个图并使用循环组合它们。我使用了以下代码:
local var Connecticut Delaware Minnesota Missouri Rhode Island Tennessee Vermont Wisconsin Hawaii
local n: word count `var'
forvalues i=1/`n'{
local a: word `i' of `var'
line prop_report_agencies modate if statename=="`a'" , ytitle(proportion_agency reports for `a') saving(gg`a',replace)
local gg `gg' "gg`a'"
}
local gg: subinstr local gg "gg`a'" `""gg`a'""'
gr combine `gg'
graph drop _all
当我这样做时,我收到此错误
ggConnecticut is not a memory graph
代码的第一部分似乎有用:代码单独创建图形并存储它们;但是,由于错误,它不能combine
。
答案 0 :(得分:1)
首先,让我们更正代码,同时将它从蜿蜒的流缩小到直线:
local S Connecticut Delaware Minnesota Missouri "Rhode Island" Tennessee Vermont Wisconsin Hawaii
foreach s of local S {
line prop_report_agencies modate if statename=="`s'", ytitle(proportion_agency reports for `s') saving(gg`s',replace)
local gg `"`gg' "gg`s'""'
}
gr combine `gg'
顺便说一句,请注意你有一个错误,因为Rhode Island
是一个州,但有两个字。
但是,我想,你的主要问题是," "
作为字符串分隔符的角色与combine
调用中需要它们作为文字字符的事实之间存在冲突。要阻止" "
被剥离,您需要使用复合双引号。您的代码显示您了解它们。复合双引号是
`" "'
这个例子很糟糕,但Stata用户使用任何最新版本的Stata都可以重现。
sysuse census, clear
local S Alabama "Rhode Island"
foreach s of local S {
histogram medage if state == "`s'", saving("gg`s'", replace)
local gg `"`gg' "gg`s'""'
}
graph combine `gg'
将来,请使用
macro list
在调试中看看问题是什么。我的猜测是" "
周围缺少Connecticut
,但其他州也存在local foo "bar"
mac li
。
要了解问题的核心,请考虑
的结果foo
本地宏local foo `""bar"'
mac li
不包含引号,因为它们已被剥离。要坚持使用复合双引号保护它们。
{{1}}