Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
From | "paul o'brien" <paul.obrien@afe2.org.uk> |
To | statalist@hsphsun2.harvard.edu |
Subject | Re: st: How to apply a command to numeric variables only |
Date | Tue, 29 May 2012 10:55:28 +0100 |
Thanks NIck, I encounter a problem with each of these suggestions: With ds and findname I get: srhcareactivity4 not labeled With -capture- inside the loop I get: variable string not found On keeping the label I get: unrecognized command: local invalid = command name Can you help? Thanks for all your very useful advice on the List. Paul On 29/05/2012, Paul O'Brien <paul.obrien@afe2.org.uk> wrote: > Thanks NIck, > > I encounter a problem with each of these suggestions: > > With ds and findname I get: srhcareactivity4 not labeled > > With -capture- inside the loop is get: variable string not found > > On keeping the label I get: unrecognized command: local invalid command > name > > Is there a tweak we are missing? > > Paul > > On 29 May 2012, at 08:27, Nick Cox wrote: > >> Similar questions arise often on this list. In your case one solution >> is to -destring- the string variables before the loop, but then the >> loop will convert back, so that does not appeal. >> >> Another is to select numeric variables beforehand. -ds- will do this >> >> ds srhcareactivity1-srhcareactivity6 , has(type numeric) >> >> foreach var in `r(varlist)' { >> >> -findname- (SJ) can do more than -ds- (fact) and has a better syntax >> (opinion), but its use is very similar here. >> >> findname srhcareactivity1-srhcareactivity6 , type(numeric) >> >> foreach var in `r(varlist)' { >> >> Another way is to use -capture- inside the loop. >> >> foreach var of varlist srhcareactivity1-srhcareactivity6{ >> capture decode `var', generate(string) >> if _rc == 0 { >> drop `var' >> rename string `var' >> } >> } >> >> Is it "string" a reserved word? (I am away from manuals at the >> moment.) I'd use something different here, even if not. >> >> Keeping the variable label can be done with extended macro functions, >> mentioned frequently on this list. >> >> foreach var of varlist srhcareactivity1-srhcareactivity6{ >> local varlabel : variable label `var' >> capture decode `var', generate(string) >> if _rc == 0 { >> drop `var' >> rename string `var' >> label var `var `varlabel' >> } >> } >> >> See -help extended fcn-. Or -help macro- first. >> >> Nick >> >> On Tue, May 29, 2012 at 6:28 AM, Paul O'Brien <paul.obrien@afe2.org.uk> >> wrote: >>> I want to do a foreach command to convert numeric variables to string >>> before a merge. Only some of the variables are numeric and which ones >>> varies with each database. >>> >>> foreach var of varlist srhcareactivity1-srhcareactivity6{ >>> decode `var', generate(string) >>> drop `var' >>> rename string `var' >>> } >>> >>> Error message: not possible with string variable. >>> >>> I have tried using capture to ignore the error. >>> >>> How can I restrict the command to numeric variables only? >>> >>> By the way, is there a way to keep the variable label which is lost when >>> I use generate. >>> >> >> * >> * 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/ > > ------------------------------- > Dr Paul O'Brien > Raymede Clinic > Westside Contraception and Sexual Health Services > Central London Community Healthcare > Exmoor St > London > W10 6DZ > UK > +44 (0)20 8962 4450 > > > > > > > > > > > * * 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/