Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Count number of integers in a string variable

    Hi there!

    What's the best way to count the number of integers in a string variable? Here is what the dataset looks like:

    Code:
    * Example generated by -dataex-. To install: ssc install dataex
    clear
    input str14 var
    "ad1v"          
    "2kjghgsf6785dg"
    "456"           
    "245gsf678578dg"
    "245gsfdg"      
    end
    I am hoping to create a new variable that is equal to 1 in row #1, 5 in row #2, and so forth.

    Thanks!

  • #2
    Hi Krishna,

    If you have egenmore installed, try:

    Code:
    egen numbersonly = sieve(var), keep(numeric)
    gen number_of_integers = strlen(numbersonly)
    If you don't have egenmore, install it running:

    Code:
    findit egenmore
    and repeat steps above.

    Comment


    • #3
      That's great -- thanks very much, Igor!

      Comment


      • #4
        I have no objection to egenmore but note also that a fairly direct solution is possible without installing anything.

        Code:
        * Example generated by -dataex-. To install: ssc install dataex
        clear
        input str14 var
        "ad1v"          
        "2kjghgsf6785dg"
        "456"           
        "245gsf678578dg"
        "245gsfdg"      
        end
        
        gen work = var 
        forval j = 0/9 {
            replace work = subinstr(work, "`j'", "", .) 
        } 
        
        gen wanted = strlen(var) - strlen(work) 
        
        list 
        
             +-------------------------------------+
             |            var        work   wanted |
             |-------------------------------------|
          1. |           ad1v         adv        1 |
          2. | 2kjghgsf6785dg   kjghgsfdg        5 |
          3. |            456                    3 |
          4. | 245gsf678578dg       gsfdg        9 |
          5. |       245gsfdg       gsfdg        3 |
             +-------------------------------------+
        See also https://www.stata-journal.com/articl...article=dm0056

        Comment


        • #5
          Today seems to be my day for demonstrating regular expressions, so if you're familiar with them, this may do what you want.
          Code:
          cls
          * Example generated by -dataex-. To install: ssc install dataex
          clear
          input str14 var
          "ad1v"          
          "2kjghgsf6785dg"
          "456"           
          "245gsf678578dg"
          "245gsfdg"      
          "gnxl"
          end
          
          generate int number = ustrlen(ustrregexra(var, "\D", ""))
          list, clean noobs
          Code:
          . list, clean noobs
          
                         var   number  
                        ad1v        1  
              2kjghgsf6785dg        5  
                         456        3  
              245gsf678578dg        9  
                    245gsfdg        3  
                        gnxl        0

          Comment


          • #6
            These are great suggestions!

            Thanks a lot, Nick Cox and William Lisowski!

            Comment

            Working...
            X