<>
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'"
}
***
HTH
Martin
-----Ursprüngliche Nachricht-----
Von: [email protected]
[mailto:[email protected]] Im Auftrag von Nick Cox
Gesendet: Montag, 26. Oktober 2009 18:21
An: [email protected]
Betreff: RE: st: AW: AW: string functions
I believe that my original solution did precisely what you asked, as you
should have found out had you tried it!
Nick
[email protected]
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/
*
* 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/