Domanda

ho dati in formato "catena" dove ci sono soggetti che ottengono un trattamento "blocca" e soggetti, o "link", che vengono reclutati da ogni "blocco". Pertanto, i miei dati sono modellati sia ampiamente ea lungo - come posso scrivere un programma Stata .dta per rimodellare per l'esecuzione di modelli? I miei dati iniziano come questo

idlock idlink1 idlink2 ...

1 10 11 ...

2 20 21 ...

21 30 31 ...

e un link può essere venuto un blocco in seguito, ma è ancora una parte della catena della serratura originale. Così, 21 è un anello della catena che inizia con 1. Ci sono fino a 5 collegamenti per ogni nuova serratura (idlink1-idlink5)

È stato utile?

Soluzione

Maggiori dettagli su ciò che si vuole fare con sono necessari i dati, ma la prima cosa che vorrei fare è creare un po 'vars che riassumono il numero di link per blocco (o descrivere le catene). Poi si può trattare i dati come dati panel lunghi con il blocco iniziale come panelid e la timevar come il numero di collegamenti o nodi della catena. Suppongo di avere alcuni più variabili nell'insieme di dati che si desidera modello (io li ho generato come DV casuale e alcuni IV), allora si può modellare qualsiasi cosa si vuole modellare utilizzando la suite di comandi -xt- in Stata (alcuni esempi sono forniti di seguito):

    *******************************! BEGIN EXAMPLE
    //this first part will input the dataset into stata//
    clear
    inp id  link0 link1 link2 link3 link4
    1     1     2     3     4     5
    1000  97  98  99   . .
    3    . . . . . 
    4    . . . . . 
    5     6     7     8     9     10
    6    . . . . . 
    7    . . . . . 
    8     11  12  13  14  15
    9   . . . . . 
    10   . . . . . 
    11   . . . . . 
    12   . . . . . 
    13   . . . . . 
    14   . . . . .      
    15   . . . . .       
    99  100  . . . . .     
    100    101 . . . .     
    101   . . . . .  
    end


    //grab local macro with variables of interest//
    unab cou: link*
    di "`cou'"


    //1. DETERMINE THE INITIAL LOCK//
    tempvar pn
    g `pn' = .
    forval z=0/4{
               forval x=1/`=_N' {
               replace `pn'= id[_n-`x'] if id==link`z'[_n-`x']
          }
    }

    gen ilock=.
    lab var ilock "Initial Lock #"
    replace ilock=1 if mi(`pn')
    order ilock
    l ilock


    //2. Links assoc. with each ilock //

    **count those with no links established** 
    count if mi(link0)


    //ilocks//
    levelsof id if ilock==1, local(ilocks)
    foreach n in `ilocks' {
        //initial step//
        preserve
        keep if id==`n'
        global s`n' "`=link0' `=link1' `=link2' `=link3' `=link4'"
        di "${s`n'}"
        global s`n':subinstr global s`n' "." "", all
        di "${s`n'}"    
        restore
        }
    macro li    

    //branches off each ilock//
    foreach n in `ilocks' {
        //branches// 
            di in red "Branch `b' for macro s`n'"
            di as err "${s`n'}"
            forval b = 1/10 {
        qui token `"${s`n'}"'
        while "`1'" != ""  {
            *di in y "`1'"
            preserve
            keep if id==`1' 
            if _N==1 {
                global s`n'  ${s`n'}  `=link0' `=link1' `=link2' `=link3' `=link4' 
                di "${s`n'}"
                global s`n':subinstr global s`n' "." "", all
                di in yellow "${s`n'}"  
                global s`n':list uniq global(s`n')
            }
            restore
            mac shift
        }
        }
        }

    //g ilock_number = ilock number if ilocks==branches//
    g ilock_number = .
    foreach n in `ilocks' {
        replace ilock_number = id if id==`n'
        di in y "${s`n'}"
        global s`n':list uniq global(s`n')
        qui token `"${s`n'}"'
        while "`1'" != ""  {
            di in y "`1'"
            replace ilock_number = `n' if id==`1'
            mac shift   
        }
    }
    order ilock_number
    sort ilock_number id
    count if mi(ilock)



    **Decriptives:Count # OF linknodes**
    sort ilock id
    bys ilock_number:  count if mi(ilock)
    sort id ilock
    bys ilock_number, rc0: g linknodes = _n 
    order id link* linknodes ilock_n 
    l id link* ilock linknodes ilock_n, ta clean div
      **descriptives**
    ta ilock
    ta ilock linknodes

**here are all the chains in your data**
levelsof ilock_number, loc(al)
foreach v in `al' {
macro list  s`v'
}



    // Running models //
    **what kind of model do you want to run?**
    **assume using ids to identify panels-->

        **create fake dv/iv's for models**
    drawnorm iv1-iv5
    g dv = abs(int(rbinomial(10, .5)))

    xtset ilock_number linknodes 
    xtreg dv iv*, re

    **or model some link/lock info like the #links**
    bys ilock_number: g ttl_nodes = _N
    xtpoisson ttl_nodes iv* dv , re
    *******************************! END EXAMPLE

^ Nota: orologio per problemi di confezionamento nel codice sopra

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top