Announcement

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

  • Data management question - figuring out a span of ordered dummy variables

    Hi all,

    Per the synthetic -dataex- included below, I am working with a sample of Pre-Kindergarten through 12th-grade schools in the United States. For each school, I have a set of dummy variables for whether the school in question offers that particular grade. I am trying to create three variables based on the information encoded in these dummies: (1) the lowest grade offered at the school, (2) the highest grade offered at the school, and (3) a single variable indicating the span of the lowest grade to the highest grade (e.g., Pre-K - 6, 9 - 12, etc.). I know that once I get variables (1) and (2), I can trivially create variable (3) with -egen group-, but I am completely flummoxed on how to create variables (1) and (2) from the dummies I have, other than through some inelegant brute-forcing of an -egen group- on the dummies. Any help would be much appreciated!

    Thanks,
    Peter

    Code:
    * Example generated by -dataex-. For more info, type help dataex
    clear
    input float id byte(prek kindergarten grade1 grade2 grade3 grade4 grade5 grade6 grade7 grade8 grade9 grade10 grade11 grade12)
      1 . . . . . . . 1 1 1 1 1 1 1
      2 . 1 1 1 1 1 1 1 1 1 . . . .
      3 . . . . . . . . . . 1 1 1 1
      4 1 1 1 1 1 1 1 1 1 1 . . . .
      5 . 1 1 1 1 1 1 1 . . . . . .
      6 . . . . . . . 1 1 1 . . . .
      7 . . . . . . . 1 1 1 . . . .
      8 1 1 1 1 1 1 1 . . . . . . .
      9 . . . . . . . . . . 1 1 1 1
     10 1 1 1 1 1 1 1 1 1 1 1 1 1 1
     11 . . . . . . . 1 1 1 1 1 1 1
     12 1 1 1 1 1 1 1 1 . . . . . .
     13 1 1 1 1 1 1 1 . . . . . . .
     14 . . . . . . . 1 1 1 1 1 1 1
     15 1 . . . . . . 1 1 1 . . . .
     16 . 1 1 1 1 1 . . . . . . . .
     17 . . . . . . . . . . 1 1 1 1
     18 . . . . . . . . . . 1 1 1 1
     19 . . . . . . . 1 1 1 . . . .
     20 . . . . . . . . . . 1 1 1 1
     21 . 1 1 1 1 1 1 . . . . . . .
     22 . . . . . . . . 1 1 1 1 1 1
     23 . . . . . . . 1 1 1 . . . .
     24 . 1 1 1 1 1 1 1 1 1 1 1 1 1
     25 . . . . . 1 1 . . . . . . .
     26 . 1 1 1 1 1 1 1 1 1 . . . .
     27 . 1 1 1 1 1 1 1 . . . . . .
     28 1 1 1 1 1 1 1 1 . . . . . .
     29 1 1 1 1 1 1 1 1 1 1 1 1 1 1
     30 . . . . . . . . . . 1 1 1 1
     31 . 1 1 1 1 1 1 . . . . . . .
     32 . 1 1 1 1 1 1 . . . . . . .
     33 1 1 1 1 1 1 1 1 1 1 . . . .
     34 . . . 1 1 1 1 1 1 1 1 1 1 1
     35 . . . . . . . 1 1 1 . . . .
     36 . . . . . . . . . . 1 1 1 1
     37 . 1 1 1 1 1 1 . . . . . . .
     38 . 1 1 1 1 1 1 . . . . . . .
     39 1 1 1 1 1 1 1 1 . . . . . .
     40 . 1 1 1 1 1 1 1 1 1 . . . .
     41 . . . . . . . 1 1 1 1 1 1 1
     42 . 1 1 1 1 1 1 1 1 1 . . . .
     43 1 1 1 1 1 1 1 1 1 1 . . . .
     44 . . . . . . . . . . 1 1 1 1
     45 . . . . . . . . . . 1 1 1 1
     46 1 1 1 1 1 1 1 1 1 1 . . . .
     47 1 1 1 1 1 1 1 1 1 1 1 1 1 1
     48 . 1 1 1 1 . . 1 1 1 1 1 1 1
     49 . . . . . . . 1 1 1 . . . .
     50 . 1 1 1 1 1 1 1 1 1 . . . .
     51 . . . . . . . . . . 1 1 1 1
     52 . 1 1 1 1 1 1 . . . . . . .
     53 1 1 1 1 1 1 1 1 1 1 . . . .
     54 . 1 1 1 1 1 1 1 1 1 1 1 1 1
     55 . 1 1 1 1 1 1 1 1 1 1 1 1 1
     56 1 1 1 1 1 1 1 1 . . . . . .
     57 . . . . . . . . . . 1 1 1 1
     58 . 1 1 1 1 1 . . . . . . . .
     59 . 1 1 1 1 1 1 . . . . . . .
     60 . . . . . . . 1 1 1 . . . .
     61 . . . . . . . . . . 1 1 1 1
     62 1 1 1 1 1 1 1 . . . . . . .
     63 1 1 1 1 1 1 1 1 1 1 1 1 1 1
     64 1 1 1 1 1 1 1 1 1 1 1 1 1 1
     65 . . . . . . . 1 1 1 . . . .
     66 . . . . . . . . . . 1 1 1 1
     67 . . . . . . . . . . . . . .
     68 1 1 1 1 1 1 1 1 . . . . . .
     69 1 1 1 1 1 1 1 . . . . . . .
     70 . 1 1 1 1 1 1 . . . . . . .
     71 1 1 1 1 1 1 1 1 . . . . . .
     72 . 1 1 1 1 1 . . . . . . . .
     73 . . . . . . . 1 1 1 . . . .
     74 1 1 1 1 1 1 1 1 1 1 . . . .
     75 1 1 1 1 1 1 1 . . . . . . .
     76 1 1 1 1 1 1 1 1 . . . . . .
     77 . . . . . . . 1 1 1 . . . .
     78 . . . . . . . . 1 1 1 . . .
     79 1 1 1 1 1 1 1 . . . . . . .
     80 . . . . . . . 1 1 1 . . . .
     81 . . . . . . . . . 1 1 1 1 1
     82 . 1 1 1 1 1 1 1 . . . . . .
     83 . 1 1 1 1 1 1 1 . . . . . .
     84 . . . . . . . 1 1 1 . . . .
     85 1 1 1 1 1 1 1 1 . . . . . .
     86 . 1 1 1 1 1 1 1 1 1 1 1 1 1
     87 . 1 1 1 1 1 1 . . . . . . .
     88 1 1 1 1 1 1 1 1 1 1 . . . .
     89 . . . . . 1 1 . . . . . . .
     90 . 1 1 1 1 1 1 . . . . . . .
     91 . 1 1 1 1 1 1 1 1 1 1 1 1 1
     92 1 1 1 1 1 1 1 1 1 1 1 1 1 1
     93 . 1 1 1 . . 1 1 1 1 1 1 1 1
     94 1 1 1 1 1 1 1 1 . . . . . .
     95 . 1 1 1 1 1 1 . . . . . . .
     96 1 1 1 1 1 1 1 . . . . . . .
     97 . . . . . . . 1 1 1 . . . .
     98 . 1 1 1 1 1 1 . . . . . . .
     99 1 1 1 1 1 1 1 . . . . . . .
    100 . . . . . . . . 1 1 . . . .
    end
    label values prek prek
    label def prek 1 "Pre-K", modify
    label values kindergarten k
    label def k 1 "K", modify
    label values grade1 first
    label def first 1 "1st", modify
    label values grade2 second
    label def second 1 "2nd", modify
    label values grade3 third
    label def third 1 "3rd", modify
    label values grade4 fourth
    label def fourth 1 "4th", modify
    label values grade5 fifth
    label def fifth 1 "5th", modify
    label values grade6 sixth
    label def sixth 1 "6th", modify
    label values grade7 seventh
    label def seventh 1 "7th", modify
    label values grade8 eighth
    label def eighth 1 "8th", modify
    label values grade9 ninth
    label def ninth 1 "9th", modify
    label values grade10 tenth
    label def tenth 1 "10th", modify
    label values grade11 eleventh
    label def eleventh 1 "11th", modify
    label values grade12 twelfth
    label def twelfth 1 "12th", modify

  • #2
    Code:
    gen wanted1 = ""
    gen wanted2 = ""
    foreach v of varlist prek-grade12{
        replace wanted1 = "`v'" if `v'==1 & wanted1==""
        replace wanted2 = "`v'" if `v'==1
    }
    gen wanted3 = wanted1+"-"+wanted2

    Comment


    • #3
      Perfect. Thanks!

      Comment


      • #4
        As a footnote, I flag the small virtues of concatenation:

        Code:
        . egen all = concat(prek-grade12)
        
        . gen first = strpos(all, "1")
        
        . gen last = strrpos(all, "1")
        
        . su first last
        
            Variable |        Obs        Mean    Std. dev.       Min        Max
        -------------+---------------------------------------------------------
               first |        100        4.25    3.814843          0         11
                last |        100       10.19    3.054042          0         14
        
        . tab all
        
                   all |      Freq.     Percent        Cum.
        ---------------+-----------------------------------
        .............. |          1        1.00        1.00
        ..........1111 |         13       13.00       14.00
        .........11111 |          1        1.00       15.00
        ........11.... |          1        1.00       16.00
        ........111... |          1        1.00       17.00
        ........111111 |          1        1.00       18.00
        .......111.... |         13       13.00       31.00
        .......1111111 |          4        4.00       35.00
        .....11....... |          2        2.00       37.00
        ...11111111111 |          1        1.00       38.00
        .111..11111111 |          1        1.00       39.00
        .1111..1111111 |          1        1.00       40.00
        .11111........ |          3        3.00       43.00
        .111111....... |         12       12.00       55.00
        .1111111...... |          4        4.00       59.00
        .111111111.... |          5        5.00       64.00
        .1111111111111 |          5        5.00       69.00
        1......111.... |          1        1.00       70.00
        1111111....... |          8        8.00       78.00
        11111111...... |          9        9.00       87.00
        1111111111.... |          7        7.00       94.00
        11111111111111 |          6        6.00      100.00
        ---------------+-----------------------------------
                 Total |        100      100.00

        Comment

        Working...
        X