Stata The Stata listserver
[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

st: Re: RE: string function


From   "Lee Chuntao" <[email protected]>
To   <[email protected]>
Subject   st: Re: RE: string function
Date   Thu, 10 Oct 2002 23:36:45 +0800

thanks, Nick

you are so helpful

Chuntao 

----- Original Message ----- 
From: "Nick Winter" <[email protected]>
To: <[email protected]>
Sent: Thursday, October 10, 2002 10:28 PM
Subject: st: RE: string function


> > -----Original Message-----
> > From: Lee Chuntao [mailto:[email protected]] 
> > Sent: Thursday, October 10, 2002 9:15 AM
> > To: [email protected]
> > Subject: st: string function
> > 
> > 
> > Hi, listers
> > 
> >      A piece of cake for you all but urgent for me. I wonder 
> > if there is
> > some function that can find how many times a character 
> > occured in a string,
> > i.e., suppose the function is string1(), so that,
> >      string1("abcd","a" )=1
> >      string1("abac","a" )=2
> >      string1("a/b/c","/" )=2
> >      string1("abcd","/" )=0
> > 
> > thanks in advance
> > 
> > Chuntao
> 
> If you have the string in a local macro, you can use the macro extended
> function subinstr to get this:
> 
> local x "a/b/cdef/ghi"
> local x : subinstr local x "/" "/" , all count(local n)
> display `n'
> 
> How this works:  The construct
> 
> local x : subinstr local y "from" "to" , all count(local n)
> 
> will take the local macro -y-, change occurrences of the string "from"
> to the string "to", put the result in the macro -x-, and will put the
> count of the number of changes in the local macro -n-.
> 
> Since you don't want to change your string--you only want the count--the
> construction I listed above will take the local -x-, replace all the
> slashes slashes, and put the result back in local -x-.  In other words,
> it will not change x.  But it will put the count you want in the local
> -n-.
> 
> If you have a string variable, and you want to count the number of times
> your target string appears in each observation, then the following
> -egen- program will do the trick.  Save the code below as _gnoccur.ado
> on your adopath.  Syntax is:
> 
> egen newvar = noccur(stringvar) , String("/")
> 
> --Nick Winter
> 
> **** BEGIN _gnoccur.ado 
> program define _gnoccur
> version 7
> 
> gettoken type 0 : 0
> gettoken g    0 : 0
> gettoken eqs  0 : 0
> 
> syntax varlist(min=1 max=1 string) [if] [in] , String(string)
> 
> local size = length(`"`string'"')
> tempvar new pos count
> qui {
> gen str1 `new'=""
> replace `new'=`varlist'
> gen `count'=0
> gen `pos' = index(`new',`"`string'"')
> capture assert `pos'==0
> while _rc {
> replace `count'=`count'+(`pos'!=0)
> replace `new'=substr(`new',`pos'+`size',.)
> replace `pos' = index(`new',`"`string'"')
> capture assert `pos'==0
> }
> 
> gen `type' `g' = `count' `if' `in'
> }
> 
> end
> 
> ********** END OF _gnoccur.ado
> 
> *
> *   For searches and help try:
> *   http://www.stata.com/support/faqs/res/findit.html
> *   http://www.stata.com/support/statalist/faq
> *   http://www.ats.ucla.edu/stat/stata/

*
*   For searches and help try:
*   http://www.stata.com/support/faqs/res/findit.html
*   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