Bookmark and Share

Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.


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

Re: st: regexm


From   Eric Booth <[email protected]>
To   "<[email protected]>" <[email protected]>
Subject   Re: st: regexm
Date   Sat, 27 Aug 2011 01:28:42 +0000

<>

Here's an example...note that I messed with the formatting of the %'s and $'s in my example data a bit to show how flexible the -regex- is in the latter part of the code; however, you'll need to check that there aren't other patterns/symbols in your string that could break my code.
  There are other ways to approach this, but I think the logic here is easy to follow:

*************! watch for wrapping:

**example data:
clear
inp str70(j)
"A: 0.35%-$197(M) 0.30%-$397(M) 0.27% th_aft."
"A: 0.25%-$198(M) 0.12%-$398(M)  0.99%-$300(M) 0.00% th_aft."
"A: 1.0%-$109(M) 0.1% th_aft."
"A: 0%-$199(M) 0.30%-$366(M) 1.99% th_aft."
end



**regexm example == easier to use -split- initially
g example = regexs(0) ///
  if regexm(j, "(([0-9]+\.[0-9]*[%-]+)([\$][0-9]*))")
l
drop example


**split:
replace j = subinstr(j, "A: ", "", 1)
split j, p("(M) ")

**first, find x10 :
g x10 = ""

tempvar flag
g `flag' = ""
foreach var of varlist j? {
replace `flag' = "`var'" if ///
	strpos(`var', "th_aft")>0
replace x10  = subinstr(`var', "th_aft.", "", .) ///
  	 if `flag' == "`var'"
replace `var' = "" if strpos(`var', "th_aft")>0
	}


**now, create x1-x9 and y1-y9
forval num = 1/9 {
 g x`num' = ""
 g y`num' = ""
  cap replace x`num' = regexs(0) if ///
	regexm(j`num', "([0-9]+\.?[0-9]*[%]+)") ///
	& !mi(j`num') & mi(x`num') //probably overkill
  cap replace y`num' = regexs(0) if ///
	regexm(j`num', "([\$][0-9]*\.?[0-9]*)") ///
	& !mi(j`num') & mi(y`num')
	}
**finally, create y10 == y2:
 g y10 = y2


****list:
l *1
l *2
l *3

*************!
- Eric

On Aug 26, 2011, at 6:59 PM, KOTa wrote:

> Dear statalisters,
> 
> I am trying to extract some data from text variable and being new to
> stata programming struggling with finding right format.
> 
> my problem is as following:
> 
> for example i have string variable as following: "A: 0.35%-$100(M)
> 0.30%-$300(M) 0.27% th_aft."
> 
> number of pairs "% - (M)" can be from 1 to 9 and it always ends by "% th_aft"
> 
> I have 10 pairs of variables X1 Y1 .... X10 Y10
> 
> my goal is to extract all pairs from the string variable and split
> them into my separate variables.
> 
> in this case the result should be:
> 
> X1  = 0.35%
> Y1 = $100
> 
> X2 = 0.30%
> Y2 = $300
> 
> X3-X9 = y3-Y9 = 0
> 
> X10 = 0.27%
> Y10 = Y2 (i.e. last Y extracted from sting)
> 
> I am trying to use regexm but unsuccessfully, Any suggestions?
> 
> 
> thank you in advance
> 
> C.
> *
> *   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/


© Copyright 1996–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index