Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
From | Eric Booth <ebooth@ppri.tamu.edu> |
To | statalist@hsphsun2.harvard.edu |
Subject | Re: st: RE: percent symbols in catplot |
Date | Fri, 26 Feb 2010 18:51:45 -0600 |
> > " The only way -sum- should report a missing r(max) is if all the data in > the variable were missing" Before posting this statement, I had tried first testing this idea by storing the r(max) of an all missing variable in a local and displaying that local, and I did get a missing value for r(max), but the reason is that I used "r(max)", not "`r(max)'" (the latter of which is called in the example Martin & I have been passing back and forth). I've always used these interchangeably, but this is an example of why that's not a good idea. For instance, if you change the if/else loop in Martin's last example to: ** if mi(r(max)) { di in r "MISSING!!!" } else{ di in r "NOT MISSING!!!" } ** You get the MISSING!!! result. I've never noticed this difference between r(max) and `r(max)' after -sum-, but it looks like it's just the difference between how Stata stores an empty local macro (`r(max)') versus an empty scalar (r(max)). E.g., di `r(nada)' displays nothing at all, just like the `r(max)' for a variable that is all missing, and for di r(nada) Stata displays a sysmiss or . And because I'm not sure whether "di r(nothing)" actually does store a sysmiss or if it's just the way Stata displays an empty scalar, this example shows the difference: ** webuse auto, clear sum mpg local x: di r(max) di "The value is `x'" *displays 41 local y: di r(nada) di "The values is `y'" *displays sysmiss ** ~ Eric __ Eric A. Booth Public Policy Research Institute Texas A&M University ebooth@ppri.tamu.edu Office: +979.845.6754 Fax: +979.845.0249 http://ppri.tamu.edu On Feb 26, 2010, at 5:02 PM, Martin Weiss wrote: > > <> > > " The only way -sum- should report a missing r(max) is if all the data in > the variable were missing" > > > > I am not sure about that. It would appear from the example that "r(max)" is > not returned at all in this case: > > > ******* > clear* > > set obs 100 > gen x=. > ins x > su x > ret li > > if mi(`r(max)') { > di in r "MISSING!!!" > } > else{ > di in r "NOT MISSING!!!" > } > > ******* > > > HTH > Martin > > > -----Original Message----- > From: owner-statalist@hsphsun2.harvard.edu > [mailto:owner-statalist@hsphsun2.harvard.edu] On Behalf Of Eric Booth > Sent: Freitag, 26. Februar 2010 23:37 > To: statalist@hsphsun2.harvard.edu > Subject: Re: st: RE: percent symbols in catplot > >> > > On Feb 26, 2010, at 4:18 PM, Martin Weiss wrote: > >> BTW Eric, is there a conceivable case that would require one to check for > a >> missing "r(max)"? Anyway, the instinct to check for missings whenever >> "greater than" is employed is a healthy one :-) > > No, it's just habit. The only way -sum- should report a missing r(max) is > if all the data in the variable were missing--which wouldn't lend its self > to a useful graph. > > Thanks for updating this to address my second example. In applying this to > my real data, I used -graph combine- but this is faster than waiting on > -graph combine-. Also, there is an advantage in using the "by" option, in > lieu of -graph combine-, in that it leaves out the extra set of yaxis > labels, which looks much nicer, and it places the "by" group labels at the > top of the graphs automatically. > > Best, > > Eric > __ > Eric A. Booth > Public Policy Research Institute > Texas A&M University > ebooth@ppri.tamu.edu > Office: +979.845.6754 > > On Feb 26, 2010, at 4:18 PM, Martin Weiss wrote: > >> >> <> >> >> The second graph requested in Eric`s initial post requires some >> modification: >> >> >> ******* >> sysuse auto, clear >> contract rep78 foreign, percent(perc) >> *-----added >> qui sum perc >> local x = round(`r(min)', 10) >> local y = round(`r(max)', 10)+10 >> local t 10 >> if `r(max)'>75 & !mi(`r(max)') { >> local t 25 >> } >> mylabels `x'(`t')`y', local(labels) myscale(@) suffix("%") >> *------ >> gen strpercent=string(perc, "%4.1fc")+ " %" /*chg. to 1 dec place*/ >> twoway (bar perc rep78) /* >> */ (scatter perc rep78, mlabcolor(black) msymbol(none) /* >> */ mlabsize(medium) mlabel(strpercent) /* >> */ mlabposition(12)), by(foreign, legend(off) note("")) /* >> */ yla(`labels') // <-- changed to use local created by -mylabels- >> ******* >> >> BTW Eric, is there a conceivable case that would require one to check for > a >> missing "r(max)"? Anyway, the instinct to check for missings whenever >> "greater than" is employed is a healthy one :-) >> >> >> HTH >> Martin >> >> -----Original Message----- >> From: owner-statalist@hsphsun2.harvard.edu >> [mailto:owner-statalist@hsphsun2.harvard.edu] On Behalf Of Eric Booth >> Sent: Freitag, 26. Februar 2010 22:33 >> To: statalist@hsphsun2.harvard.edu >> Subject: Re: st: RE: percent symbols in catplot >> >>> >> >> Thanks, Martin. >> This is a great workaround for my situation (& it's much better than my > idea >> of tinkering with the .grec file output). >> >> >>> I failed to bring this up at the last wishes & grumbles in Florence. A >>> -format- that adds the percentage sign, just like in spreadsheet >> software... >> >> Yes I agree, hopefully Stata will implement a percentage format someday. >> >> ___ >> Just FYI for anyone else who needs something like this: >> I slightly modified Martin's example to use NJC's -mylabels- (from SSC & >> referenced in the 2008 thread Martin referred me to) so that I could > easily >> shift the yaxis with the range of the data in a way that makes sense for > the >> way I need to display results--so, something like: >> >> *******begin >> sysuse auto, clear >> contract rep78, percent(perc) >> *-----added >> qui sum perc >> local x = round(`r(min)', 10) >> local y = round(`r(max)', 10)+10 >> local t 10 >> if `r(max)'>75 & !mi(`r(max)') { >> local t 25 >> } >> mylabels `x'(`t')`y', local(labels) myscale(@) suffix("%") >> *------ >> gen strpercent=string(perc, "%4.1fc")+ " %" /*chg. to 1 dec place*/ >> twoway (bar perc rep78) /* >> */ (scatter perc rep78, mlabcolor(black) msymbol(none) /* >> */ mlabsize(medium) mlabel(strpercent) /* >> */ mlabposition(12)), legend(off) /* >> */ yla(`labels') // <-- changed to use local created by -mylabels- >> *******end >> (note that the ylab changes from increasing by 10 to increasing by 25 if > the >> r(max) > 75) >> >> >> Thanks again, >> >> Eric >> __ >> Eric A. Booth >> Public Policy Research Institute >> Texas A&M University >> ebooth@ppri.tamu.edu >> Office: +979.845.6754 >> >> >> On Feb 26, 2010, at 2:47 PM, Martin Weiss wrote: >> >>> >>> <> >>> >>> You can always go for a kludge: >>> >>> >>> ******* >>> sysuse auto, clear >>> contract rep78, percent(perc) >>> gen strpercent=string(perc, "%4.2fc")+ " %" >>> twoway (bar perc rep78) /* >>> */ (scatter perc rep78, mlabcolor(black) msymbol(none) /* >>> */ mlabsize(medium) mlabel(strpercent) /* >>> */ mlabposition(12)), legend(off) /* >>> */ yla(0 "0%" 10 "10%" 20 "20%" 30 "30%" 40 "40%" 50 "50%") >>> ******* >>> >>> >>> HTH >>> Martin >>> >>> >>> -----Original Message----- >>> From: owner-statalist@hsphsun2.harvard.edu >>> [mailto:owner-statalist@hsphsun2.harvard.edu] On Behalf Of Eric Booth >>> Sent: Freitag, 26. Februar 2010 21:12 >>> To: statalist@hsphsun2.harvard.edu >>> Subject: st: percent symbols in catplot >>> >>>> >>> >>> I am using -catplot- (from SSC) on Stata 11 MP for Mac OSX. I'd like to >>> show the percent sign in the label for each of the category bars when >> using >>> the "percent" option. >>> >>> For example, >>> **** >>> webuse auto, clear >>> catplot bar rep78, percent blabel(bar, position(outside) format(%9.1f)) >>> **or** >>> catplot bar rep78, by( for) percent blabel(bar, position(outside) >>> format(%9.1f)) >>> **** >>> shows the percent of each rep78 category out of 100, but I can't get it > to >>> show the % sign, so it could say "43.5%", etc. >>> >>> Using graph editor, I found that I can add a % sign to the bar label text >>> manually (though I'd rather not have to do that for many graphs), but >> after >>> looking through the barlabel options help documentation, I couldn't > figure >>> out how to change the bar label automatically. (I had the idea that if I >>> could override the bar labels like you can the text for a key in a legend >>> then I could calculate and substitute these values into the -catplot- >>> command in a loop, but I haven't found a way to do this using the > barlabel >>> option) >>> >>> Another option might be to write something that automates those graph >>> recorder grec file changes (ex: when I add the "%" by hand, it issues > the >>> command: >>> >>> .plotregion1.barlabels[3].text.Arrpush 43.5% >>> >>> in the recording), but this is a pain. Any suggestions? >>> >>> Thanks, >>> >>> Eric >>> __ >>> Eric A. Booth >>> Public Policy Research Institute >>> Texas A&M University >>> ebooth@ppri.tamu.edu >>> Office: +979.845.6754 >>> >>> * > > > For searches and help try: > * http://www.stata.com/help.cgi?search > * http://www.stata.com/support/statalist/faq > * http://www.ats.ucla.edu/stat/stata/ * * For searches and help try: * http://www.stata.com/help.cgi?search * http://www.stata.com/support/statalist/faq * http://www.ats.ucla.edu/stat/stata/