【问题标题】:Stata: Levelsof with a string variableStata:带有字符串变量的Levelsof
【发布时间】:2015-04-24 14:14:53
【问题描述】:

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

中的几个值后给出了错误 too many ')' or ']'
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
}

【问题讨论】:

  • 将 display “-- `i' -- `j' -- `z' --” 添加到您的循环中,您将看到问题的开始。

标签: stata


【解决方案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,因此您不需要这样做两次。只需引用本地宏x,就可以避免定义k,然后按顺序提取其成员。

【讨论】:

  • 据我了解,在 egen 命令中使用 in 并不是我想要的。我需要选择五个最大的 mpg 值,然后计算具有相应 mpg 的车辆数量(在实际示例中,标识变量 (mpg) 对于每个品牌都是唯一的)。我如何在上面的代码中解释这一点
  • 如果我的回答不能解决你的困难,请重新写下你的问题,问你真正的问题。据我所知,我已经编写了代码来完成您的代码未能做到的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多