Yes indeed. I was focusing on "not placed at the end of the label" but
Miranda is also concerned with many different units.
So, the example code I gave is not a complete solution. Other solutions
would include a loop within a loop or the use of regular expressions.
Nick
[email protected]
Martin Weiss
But was your solution not conditional on the strings wedged between the
parantheses? So it would probably require Miranda to enumerate all
possible
constellations of strings found between them. If the unit was square
meters,
as in the example below, the code would have to be amended to account
for
this new variant...
***
clear*
set obs 1
gen x1=.
gen x2=.
la var x1 "in (cm sq)"
la var x2 "in (m sq)"
qui ds, has(varlabel)
foreach v in `r(varlist)'{
local label : var label `v'
local label : subinstr local label "(cm sq)" "", all
local label : subinstr local label "(cm)" "", all
label var `v' "`label'"
}
***
Nick Cox
I believe that my original solution did precisely what you asked, as you
should have found out had you tried it!
Miranda Kim
Thanks a lot for your responses Nick and Martin,
I am only removing the units from labels when it is appropriate to do so
(for example when creating a z-score and using the original variable
label to create a new label for the standardised variable).
Is there a generic way of removing the bracketed units even if they are
not placed at the end of the label, for example "total vit A intake
(mg/day), before pregnancy". Note that I have over fifty different units
(some are 1 word in length, some 2 words and some 3 due to spaces in the
brackets) and I was hoping to not have to list them all using the
subinstr() function.
Many thanks for your suggestions!
Martin Weiss wrote:
>
> Version resistant to labels without opening brackets/parantheses
>
>
> *************
> clear*
>
> set obs 1
> gen myvar1=.
> gen myvar2=.
> gen myvar3=.
> la var myvar1 "area (cm sq)"
> la var myvar2 "other area (cm sq)"
> la var myvar3 "other area"
>
> qui ds, has(varlabel)
>
> foreach var of varlist `r(varlist)'{
> local mylabel="`:var label `var''"
> if strpos("`mylabel'","(")!=0{
> local mynewlabel= /*
> */ substr("`mylabel'", 1, strpos("`mylabel'","(")-1)
> la var `var' "`mynewlabel'"
> }
> }
> *************
Martin Weiss
> *************
> clear*
>
> set obs 1
> gen myvar1=.
> gen myvar2=.
>
> la var myvar1 "area (cm sq)"
> la var myvar2 "other area (cm sq)"
>
> desc
>
> qui ds, has(varlabel)
>
> foreach var of varlist `r(varlist)'{
> local mylabel="`:var label `var''"
> local mynewlabel=substr("`mylabel'", 1,
strpos("`mylabel'","(")-1)
> la var `var' "`mynewlabel'"
> }
>
> //check success
> desc
> *************
Miranda Kim
> I have a basic question on using string functions to do the following:
> I have variable labels that have various units in brackets: (cm) (cm
sq)
> etc. and I want to remove these from the label.
> How can I search a string for the portion between brackets (including
> the brackets) and replace this with a blank?
> For example if my variable area has the following label: "area (cm sq)
> of ..."
> I want to replace the label with : "area of ..."
> I have many variables so I want to automate this rather than having to
> type in individual labels...
> I use stata v10
*
* 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/