将多个图形与循环组合

时间:2014-10-29 16:27:44

标签: stata

我想创建多个图并使用循环组合它们。我使用了以下代码:

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

1 个答案:

答案 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}}