Statalist


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: st: AW: AW: string functions


From   "Nick Cox" <[email protected]>
To   <[email protected]>
Subject   RE: st: AW: AW: string functions
Date   Mon, 26 Oct 2009 18:10:57 -0000

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/



© Copyright 1996–2024 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index