Bookmark and Share

Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: st: Making permutations of dyads


From   Robert Picard <[email protected]>
To   "[email protected]" <[email protected]>
Subject   Re: st: Making permutations of dyads
Date   Thu, 19 Dec 2013 17:50:31 -0500

Here are a few more ways to do this. Scott's solution is equivalent to
using -joinby-.

For time bands (I assume this means a running window of 5 minutes),
then -cross- can be used to create all pairwise combinations and drop
those that do not fall within the time constraint. This is a brute
force approach that may quickly become unmanageable if there are too
many observations.

If there are only a few dyads expected to fall within the window of
time, then a loop approach may be more efficient.

Robert

* --------------------------- begin example -------------
clear
input id   str4 time  block
1     "8:00"  1
2     "8:02"  1
3     "8:02"  1
4     "8:04"  1
5     "8:06"  2
6     "8:07"  2
7     "8:09"  2
end

* to be able to do time arithmetic using milliseconds
gen double dtime = clock("2013.12.19"+time,"YMDhm")
format %tc dtime
tempfile f
save "`f'"

* the -joinby- approach
rename id id2
joinby block using "`f'"
keep if id < id2
sort id id2
list id id2, noobs sepby(id)

* the -cross- approach with "time bands"
use "`f'", clear
rename * *2
cross using "`f'"
keep if id < id2 & inrange(dtime2-dtime,0,5*60000-1)
sort id id2
list id id2, noobs sepby(id)

* loop over forward observations until no more cases
* are found within the window of time.
use "`f'", clear
isid dtime id, sort
local i 0
local more 1
while `more' {
    local ++i
    gen did`i' = id[_n+`i'] if ///
        inrange(dtime[_n+`i']-dtime,0,5*60000-1)
    count if !mi(did`i')
    local more = r(N)
}
reshape long did, i(id) j(n)
drop if mi(did)
sort id did
list id did, noobs sepby(id)
* --------------------------- end example ----------------

On Thu, Dec 19, 2013 at 4:17 PM, Scott Merryman
<[email protected]> wrote:
> adapted from John-Paul Ferguson's -dyads-  (-ssc desc dyads- for more
> info).
>
>  clear
> input id   str4 time  block
>  1     "8:00"  1
>  2     "8:02"  1
>  3     "8:02"  1
>  4     "8:04"  1
>  5     "8:06"  2
>  6     "8:07"  2
>  7     "8:09"  2
>  end
> bys block: generate dim = _N
> expand dim
> sort block id
> by block id: generate column = _n
> by block :generate id_d = id[_n+column*dim]
> drop if mi(id_d)
> drop dim column
> gen dyad = string(id)+ string(id_d)
> order id id_d
> l
>
>
> Scott
>
>
> On Thu, Dec 19, 2013 at 2:10 PM, Douglas Levy
> <[email protected]> wrote:
>> Actually, to correct my initial post, I'd be interested in
>> *combinations* not *permutations*. So to restate and revise:
>> ID    time  5m_block
>> 1     8:00  1
>> 2     8:02  1
>> 3     8:02  1
>> 4     8:04  1
>> 5     8:06  2
>> 6     8:07  2
>> 7     8:09  2
>>
>> For 5 minute time blocks,  I'd want to output a dataset that looks like this:
>> Dyad
>> 12
>> 13
>> 14
>> 23
>> 24
>> 34
>> 56
>> 57
>> 67
>>
> *
> *   For searches and help try:
> *   http://www.stata.com/help.cgi?search
> *   http://www.stata.com/support/faqs/resources/statalist-faq/
> *   http://www.ats.ucla.edu/stat/stata/
*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/faqs/resources/statalist-faq/
*   http://www.ats.ucla.edu/stat/stata/


© Copyright 1996–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index