Reputation: 1971
I can't quite grasp how to insert a variable's value labels for titles to a graph.
For example, in sysuse auto
, the variable foreign
takes the value of 0 or 1 where 0 is labeled "Domestic" and 1 is labeled "Foreign".
In the following snippet, I want to plot the average price for each category of the variable foreign
using a loop:
sysuse auto, clear
forvalues i=0/1{
local t = foreign[`i']
graph bar (mean) price if foreign == `i', ///
over(rep78, sort(price) descending) asyvars ///
title("`t'") name(p_`i', replace) nodraw
local graphs `graphs' p_`i'
}
gr combine `graphs'
but it does not even display the category value correctly in the title.
What am I doing wrong?
Upvotes: 0
Views: 3540
Reputation: 37208
Note that either of these graph
commands
sysuse auto, clear
graph bar (mean) price , ///
over(rep78, sort(price) descending) asyvars over(foreign)
graph bar (mean) price , ///
over(rep78, sort(price) descending) asyvars by(foreign)
uses value labels automatically and produces a combined graph directly. This may not be the main question, but the original code is not a good solution on those grounds.
Upvotes: 0
Reputation:
Your code
local t = foreign[`i']
sets the local macro t
to the value of the variable foreign
first in observation 0 and then in obseration 1: these will be missing and 0, respectively.
What you want is the value label corresponding to the values 0 and 1, which you can obtain with
local t : label (foreign) `i'
Swap this into your code and your graphs will be labelled Domestic and Foreign, respectively.
The syntax of the replacement command may be unfamiliar; macro "extended functions" are described in help extended_fcn
.
Upvotes: 2