Announcement

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

  • Add an if in Mata mean function

    Dear Stata users,

    In the following code, can we add an 'if' expression in mata command? Thank you.
    For example, I want to caculate mean of ages only for urban respondents.

    Code:
    mata : all = st_data(., "age1 age2 age3 age4")
    mata : mean(vec(all))

  • #2
    st_data() has an optional scalar selectvar argument that you can use. If your dataset has an indicator variable in Stata that is 1 for urban respondents and 0 otherwise, then you can reference it in the third argument to st_data()

    Comment


    • #3
      Thank you Joseph Coveney My indicator variable is resident, 1 for city and 2 for urban. Can you make clear how to fix the code in #1? I try all the following codes and failed.

      Code:
      mata : all = st_data(., "y1d1 y1d2 y1d3 y1d4 y1d5 y1d6 y1d7 y1d8 y1d9 y1d10", if resident==1)
      mata : all = st_data(., "y1d1 y1d2 y1d3 y1d4 y1d5 y1d6 y1d7 y1d8 y1d9 y1d10", "if resident==1")
      mata : all = st_data(., "y1d1 y1d2 y1d3 y1d4 y1d5 y1d6 y1d7 y1d8 y1d9 y1d10", "resident==1")
      mata : all = st_data(., "y1d1 y1d2 y1d3 y1d4 y1d5 y1d6 y1d7 y1d8 y1d9 y1d10", resident==1)

      Comment


      • #4
        Originally posted by Chen Samulsion View Post
        My indicator variable is resident, 1 for city and 2 for urban. Can you make clear how to fix the code in #1?
        Sure:
        Code:
        // One way
        mata: stata("generate byte urban = resident == 1")
        mata: mean(vec(st_data(., "y1d1 y1d2 y1d3 y1d4 y1d5 y1d6 y1d7 y1d8 y1d9 y1d10", "urban")))
        
        // Another
        mata: mean(vec(select(st_data(., "y1d1 y1d2 y1d3 y1d4 y1d5 y1d6 y1d7 y1d8 y1d9 y1d10"), st_data(., "resident") :== 1)))
        What's the difference between city and urban?

        Comment


        • #5
          Joseph Coveney Thank you very much. That's great!
          What's the difference between city and urban?
          Sorry for my typo that has lead to confusion, it should be rural and urban.

          Comment

          Working...
          X