capture log close log using crhier, replace clear infile using family if rectype==1 drop rectype gen long id = _n /* make my own temporary id var */ sort id /* to set sort markers */ save tmph, replace clear infile using person /* no matter what the rectype */ assert rectype==1 | rectype==2 /* just to be safe -- see note */ gen long id = 1 if rectype==1 replace id = sum(id) drop if rectype==1 drop rectype sort id perid merge id using tmph assert _merge==3 /* they are supposed to match */ drop _merge id sort famid perid save hier, replace erase tmph.dta log close exit