Требуются дополнительные сведения о том, что вы хотите сделать с данными, но первое, что я хотел бы сделать, - это создать несколько переменных, которые суммируют количество ссылок на блокировку (или описывают цепочки).Затем вы можете обрабатывать данные как длинные данные панели с начальной блокировкой в качестве 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
^ note: следите за проблемами переноса в приведенном выше коде!