{smcl} {* 22may2006}{...} {cmd:help mata mm_unorder2()} {hline} {title:Title} {p 4 8 2} {bf:mm_unorder2() -- Stable unorder} {title:Syntax} {p 8 16 2} {it:real colvector}{bind: } {cmd:mm_unorder2(}{it:real scalar n}{cmd:)} {p 8 16 2} {it:transmorphic matrix}{bind: } {cmd:mm_jumble2(}{it:transmorphic matrix X}{cmd:)} {p 8 16 2} {it:void}{bind: } {cmd:mm__jumble2(}{it:transmorphic matrix X}{cmd:)} {p 4 8 2} where {it:X} may not be a pointer matrix. {title:Description} {pstd} The results from official Stata's {cmd:unorder()} are not reproducible if {it:n} is large. That is, differing results may be obtained from {cmd:unorder()}, although the random-number seed has been set beforehand (see help for {helpb mf_uniform:[M-5]{space 1}uniform()}). {cmd:mm_unorder2()} is an improved version of official {cmd:unorder()} that produces stable results. {pstd}{cmd:mm_jumble2()} and {cmd:mm__jumble2()} are stable versions of official {cmd:jumble()} and {cmd:_jumble()}. {pstd}For descriptions of {cmd:unorder()}, {cmd:jumble()}, and {cmd:_jumble()} see help for {helpb mf_sort:[M-5]{space 1}sort()}. {title:Remarks} {pstd}The following example illustrates the problem: {com}: for (i=1;i<=10;i++) { > uniformseed(3) > p1 = unorder(100000) > uniformseed(3) > p2 = unorder(100000) > if (p1!=p2) { > printf("round %g: unequal results\n", i) > break > } > } {res}round 2: unequal results{txt} {pstd}Explanation: {helpb mf_uniform:uniform()} may return duplicate pseudo random numbers due to computer precision constraints. Example: {com}: uniformseed(3) {res} {com}: rows(uniqrows(uniform(100000,1))) {res} 99999{txt} {pstd}Since the results from {cmd:unorder()} rely on the sort order of uniform pseudo random numbers and since the sort order of duplicate values is randomized independently from the usual random-number seed, results from {cmd:unorder()} may differ. {pstd}{cmd:mm_unorder2()} solves the problem by using two pseudo random-number sequences instead of one. {title:Conformability} {p 4 4 2} {cmd:mm_unorder2(}{it:n}{cmd:)}: {p_end} {it:n}: 1 {it:x} 1 {it:result}: {it:n x} 1 {p 4 4 2} {cmd:mm_jumble2(}{it:X}{cmd:)}: {p_end} {it:X}: {it:r1 x c1} {it:result}: {it:r1 x c1} {p 4 4 2} {cmd:mm__jumble2(}{it:X}{cmd:)}: {p_end} {it:X}: {it:r1 x c1} {it:result}: {it:void}; {it:X} row order modified {title:Diagnostics} {pstd} See help for {helpb mf_sort:[M-5] sort()}. {title:Source code} {pstd} {help moremata_source##mm_unorder2:mm_unorder2.mata}, {help moremata_source##mm_jumble2:mm_jumble2.mata}, {help moremata_source##mm__jumble2:mm__jumble2.mata}. {title:Author} {pstd} Ben Jann, University of Bern, jann@soz.unibe.ch {title:Also see} {psee} Manual: {hi:[M-5] sort()} {psee} Online: help for {helpb mf_sort:[M-5] sort()}; {helpb moremata} {p_end}