2 Stimmen

Umformung von Daten im "Ketten"-Format (stata .DTA-Datei)

Ich habe Daten im "Ketten"-Format, in dem es Probanden gibt, die eine Behandlung erhalten, "Schlösser" und Probanden oder "Links", die von jedem "Schloss" rekrutiert werden. Daher sind meine Daten sowohl breit als auch lang geformt - wie kann ich ein Stata-.DTA-Programm schreiben, um sie für laufende Modelle umzuformen? Meine Daten beginnen wie folgt

idlock idlink1 idlink2 ...

1 10 11 ...

2 20 21 ...

21 30 31 ...

und ein Glied kann später zu einem Schloss werden, aber es ist immer noch ein Teil der Kette des ursprünglichen Schlosses. 21 ist also ein Glied in der Kette, das mit 1 beginnt. Es gibt bis zu 5 Glieder für jedes neue Schloss (idlink1-idlink5)

1voto

eric.a.booth Punkte 651

Man muss genauer wissen, was man mit den Daten machen will, aber als erstes würde ich einige Variablen erstellen, die die Anzahl der Verbindungen pro Schloss zusammenfassen (oder die Ketten beschreiben). Dann können Sie die Daten als lange Paneldaten behandeln, mit der anfänglichen Sperre als panelid und der timevar als Anzahl der Glieder oder Knoten in der Kette. Ich gehe davon aus, dass Sie weitere Variablen im Datensatz haben, die Sie modellieren möchten (ich habe sie als zufällige DV und einige IVs generiert), dann können Sie modellieren, was immer Sie modellieren möchten, indem Sie die Reihe von -xt-Befehlen in Stata verwenden (einige Beispiele finden Sie unten):

    *******************************! 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

^Anmerkung: Achten Sie auf Umbruchprobleme im obigen Code!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X