Bookmark and Share

Notice: On March 31, it was announced that Statalist is moving from an email list to a forum. The old list will shut down on April 23, and its replacement, statalist.org is already up and running.


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

Re: st: subinstr and special characters ? and *


From   A Loumiotis <antonis.loumiotis@gmail.com>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: subinstr and special characters ? and *
Date   Mon, 16 Aug 2010 09:46:04 +0300

Eric: Thanks a lot for your detailed explanation of how to use regexr
and macro extended functions to solve my particular problem!

On Sat, Aug 14, 2010 at 9:10 PM, Eric Booth <ebooth@ppri.tamu.edu> wrote:
> <>
>
> As Nick suggests, use use a regex function:
> *************!
> cap macro drop _all
>
> //example 1//
> clear all
> local a p_2_3456
>  local b1  = regexr("`a'" , "_[0-9]+_" ,"__")
>  local b2  `=regexr("`a'" , "_[0-9]+_" ,"__")'
>  local b3  "`=regexr("`a'" , "_[0-9]+_" ,"__")'"
> macro dir _b1 _b2 _b3
>
>
> //example 2:   if instead "`a'" is a variable you would:
> clear all
> set obs 1
> local a p_2_3456
> g i = "`a'"
> g i2 =  regexr("`a'" , "_[0-9]+_" ,"__")
> li
> local b = i2
> di "`b'"
>
>
> //example 3//
>        /*
> finally, the macro extended_fcn commands don't have regex, just subinstr
> so, you could use a loop  & subinstr to cycle over the possible characters
> you want to  remove if your set on using extended_fcns
>        */
>
> clear all
>        numlist  "1(1)9"
> foreach n in `c(alpha)'  `c(alpha)'  `r(numlist)'  {
>        qui local a2: subinstr local a "_`n'_" "__", count(local break)
>                if `break'>0 {
>                        qui local b= "`a2'"
>                }
>        }
> di "`b'"
> *************!
>
> ~ Eric
>
> __
> Eric A. Booth
> Public Policy Research Institute
> Texas A&M University
> ebooth@ppri.tamu.edu
> Office: +979.845.6754
>
>
>
> On Aug 13, 2010, at 5:25 AM, A Loumiotis wrote:
>
>> Hi,
>>
>> Is there a way to use subinstr to replace a pattern that is given with
>> the special characters ? or * with something else?
>>
>> For example:
>>
>> local a p_2_3456
>> local b: subinstr local a "_?_" "__"
>> di "`b'"
>> local b=subinstr("`a'","_?_","__",1)
>> di "`b'"
>>
>> I would expect that b will now be p__3456 but subinstr does not
>> recognize _?_ to include _2_ .
>> Is there anyway to do this?
>> Thanks,
>> Antonis
>
>
>
>
> *
> *   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–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   Site index