【问题标题】:Reshaping Data in "chains" format (stata .DTA file)以“链”格式重塑数据(stata .DTA 文件)
【发布时间】:2010-12-29 21:08:07
【问题描述】:

我有“链”格式的数据,其中有受试者获得治疗“锁”和从每个“锁”招募的受试者或“链接”。因此,我的数据被广泛和长期地塑造——我如何编写一个 Stata .DTA 程序来重塑运行模型?我的数据是这样开始的

idlock idlink1 idlink2 ...

1 10 11 ...

2 20 21 ...

21 30 31 ...

一个链接可以在以后上锁,但它仍然是原始锁链的一部分。因此,21 是从 1 开始的链中的一个环节。 每个新锁最多有 5 个链接(idlink1-idlink5)

【问题讨论】:

    标签: stata reshape


    【解决方案1】:

    需要更多关于你想对数据做什么的细节,但我要做的第一件事是创建一些变量来总结每个锁的链接数(或描述链)。然后您可以将数据视为长面板数据,初始锁定为 panelid,timevar 为链中链接或节点的数量。我假设您在要建模的数据集中还有一些变量(我已将它们生成为随机 DV 和一些 IV),然后您可以使用 -xt- 命令套件对您想要建模的任何内容进行建模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
    

    ^注意:注意上面代码中的包装问题!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多