Announcement

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

  • Elegant way of creating categorical variable from set of disjoint dummy variables?

    Is there a clever way to simplify this procedure?

    Code:
    g regionstr = ""
    foreach region in _MENA _SSAF _LAC _WEOFF _EECA _SEAS {
        replace regionstr = "`region'" if `region'
    }
    encode regionstr, g(region)
    We may assume that the set of dummy variables is disjoint. I have no preference about which dummy gets which value (e.g. _MENA = 3), but the values should be labeled. This seems like a common thing to want to do, but I don't see a more elegant way to do it.

  • #2
    Another way to do it. You know how to encode

    Code:
    * absit sandbox; hic est sandbox 
     
    clear 
    
    set obs 6 
    
    tokenize "_MENA _SSAF _LAC _WEOFF _EECA _SEAS" 
    
    forval j = 1/6 { 
         gen ``j'' = _n == `j' 
    } 
    
    
    list, sep(0)  
    
         +-----------------------------------------------+
         | _MENA   _SSAF   _LAC   _WEOFF   _EECA   _SEAS |
         |-----------------------------------------------|
      1. |     1       0      0        0       0       0 |
      2. |     0       1      0        0       0       0 |
      3. |     0       0      1        0       0       0 |
      4. |     0       0      0        1       0       0 |
      5. |     0       0      0        0       1       0 |
      6. |     0       0      0        0       0       1 |
         +-----------------------------------------------+
    
    . 
    * you start here 
    tokenize "_MENA _SSAF _LAC _WEOFF _EECA _SEAS" 
    
    gen regionstr = "" 
    . 
    quietly forval j = 1/6 { 
        local J : subinstr local `j' "_" "", all
        replace regionstr = "`J'" if ``j'' 
    } 
    
     
    list, sep(0) 
    
         +----------------------------------------------------------+
         | _MENA   _SSAF   _LAC   _WEOFF   _EECA   _SEAS   region~r |
         |----------------------------------------------------------|
      1. |     1       0      0        0       0       0       MENA |
      2. |     0       1      0        0       0       0       SSAF |
      3. |     0       0      1        0       0       0        LAC |
      4. |     0       0      0        1       0       0      WEOFF |
      5. |     0       0      0        0       1       0       EECA |
      6. |     0       0      0        0       0       1       SEAS |
         +----------------------------------------------------------+

    Comment

    Working...
    X