Stata:带有字符串变量

时间:2015-04-24 14:14:54

标签: stata

我有一种情况需要在两个变量 mpg make 中使用值来创建图形。变量 mpg 是一个数值变量, make 是一个带空格的字符串变量。当我忽略 make 变量中的值时,以下代码能够使用 mpg 中的值来创建图形。但是我希望变量 make 中的相应字符串值出现在图形副标题中。出于某种原因,在循环变量 mpg

中的几个值之后,此代码会给出错误太多')'或']'
sysuse auto.dta, clear

gsort - trunk
keep in 1/5

levelsof mpg, local(levels)
global xlist  `levels'
levelsof make, local(levelsdes)
global ylist `levelsdes'

sysuse auto.dta, clear
gen bar=1
local k 1 2 3 4 5  
local n : word count $xlist
forvalues x =1/`n' {
local i : word `x' of $xlist
local z : word `x' of `k'
local j : word `x' of $ylist

egen a_`i'= total(bar) if mpg == `i'

twoway (bar a_`i' mpg ), subtitle(`j') title(Trends in Error `i') 
graph export "`z'.png", as(png)  replace
}

1 个答案:

答案 0 :(得分:1)

这里的问题是想要使用图标题中变量的特定字符串值。使用levelsof将字符串值放入宏中然后再将其拉出是(1)间接的和(2)棘手的,因为空格使基于单词的任何提取变得复杂。所以,在我看来,你可以而且应该更直接地做到这一点:

sysuse auto.dta, clear
gsort - trunk
gen bar = 1

forval i = 1/5 { 
    egen a_`i'= total(bar) in `i'
    twoway bar a_`i' mpg, subtitle("`=make[`i']'") 
    graph export "`i'.png", as(png)  replace
}

即使字符串值指的是不是单身的观察子集,也会有类似于你真实问题的东西,但是为了获得更详细的建议,你应该更多地解释真正的问题。

顺带注意

local k 1 2 3 4 5  

forvalues x = 1/5 {
    local z : word `x' of `k'
}

也是间接的。你的循环设置为循环超过1/5,所以你不需要这样做两次。通过引用本地宏k,可以避免定义x然后按顺序提取其成员。