「チェーン」形式でデータを再形成する(stata .dtaファイル)

StackOverflow https://stackoverflow.com/questions/4557869

  •  14-10-2019
  •  | 
  •  

質問

「チェーン」形式のデータがあります。ここでは、「ロック」から募集される「ロック」の「ロック」と被験者、または「リンク」を取得する被験者があります。したがって、私のデータは広くかつ長く形成されています - ランニングモデルの再構築するためにStata .DTAプログラムを書くにはどうすればよいですか?私のデータはこのように始まります

idlock idlink1 idlink2 ...

1 10 11 ...

2 20 21 ...

21 30 31 ...

そして、リンクは後でロックになる可能性がありますが、それでも元のロックのチェーンの一部です。したがって、21は1から始まるチェーン内のリンクです。新しいロックごとに最大5つのリンクがあります(idlink1-idlink5)

役に立ちましたか?

解決

データで何をしたいのかの詳細が必要ですが、最初にやることは、ロックあたりのリンク数を要約する(またはチェーンを説明する)いくつかのVARを作成することです。次に、最初のロックを使用して、チェーン内のリンクまたはノードの数として、初期ロックを使用して長いパネルデータとして扱うことができます。モデル化するデータセットに(ランダムDVおよびいくつかのIVとして生成した)、データセットにさらに変数があると思います。 STATA(いくつかの例を以下に示します):

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

^注:上記のコードで問題をラッピングするのに注意してください!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top