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: string function


From   Nick Cox <[email protected]>
To   [email protected]
Subject   Re: st: string function
Date   Wed, 24 Aug 2011 11:59:19 +0100

Solutions to all these could be written as -egen- functions or Mata functions.

Here I focus on "official Stata only" solutions.

First question is discussed in

Nicholas J. Cox
Stata tip 98: Counting substrings within strings
The Stata Journal 11(2): 318-320

length("abcdaf") - length(subinstr("abcdaf", "a", "", .))

Last two questions

any of "a", "b", "c"

max(strpos("abcdaf","a"), strpos("abcdaf", "b"), strpos("abcdaf", "c")) > 0

all of "a", "b", "c"

min(strpos("abcdaf","a"), strpos("abcdaf", "b"), strpos("abcdaf", "c")) > 0

If you had a long list of candidates, I would do something like this:

gen found = 0

qui foreach letter in s o m e t h i n g {
       replace found = max(found, strpos(strvar, "`letter'") > 0)
}

where for "max" substitute "min" as needed.

The mapping max <-> any, min <-> all is discussed in
http://www.stata.com/support/faqs/data/anyall.html

Nick

2011/8/24 Grace Jessie <[email protected]>:

> How to count how many times a substring appears in a string?
> For example,
> function("abcdaf","a")=2
>
> And, how to check if a string variable has certain substrings?
> With regard to this, I want to ask two functions.
> For example,
> function("abcdaf","a","b","c")
> One of what I want to do is to return 1 if a or b or c is included in "abcdaf", ;
> the other is to return 1 if a, b and c are included in "abcdaf".
> Could anyone tell me the correct functions for thoes above?
*
*   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