Michael,
On 2007/05/24 Michael Blasnik wrote:
> Stata works sequentially through the variable in a replace,
> which allows functions such as sum() to accumulate a
> running sum and allows [_n-1] constructs
<snip>
> program define scramble
> version 9.2
> syntax [varlist]
> tempvar hold order rand
> gen long `order'=_n
> foreach var of local varlist {
> gen `rand'=uniform()
> gen `hold'=`var'
> sort `rand'
> replace `var'=`hold'[`order']
> drop `rand' `hold'
> }
> end
thank you for refreshing my memory with
regard to -replace-
You are also right in saying that I don't
need the -clonevar- construct - instead I
just use replace and a temp var (although,
I still use _`var' in place of an actual
temp var, because each run permutes one
_or more_ variables).
To round things off I include a copy of
my current ado file below, in compact form.
/Jesper
*-------------------------------------------*
program define bfsimu, rclass
version 9.2
syntax ...
tempfile ORG bfPERM
tempvar tag dtrank sortorder
marksample touse, strok
...
qui drop if !`touse'
gen long `sortorder' = _n
keep `sortorder' `Varlist'
sort `sortorder'
qui save `ORG'
forval r = `nextrun'/`reps' {
qui use `ORG'
local oldseed "`seed'"
foreach gr of local nVarlist {
sort `gr'
local concat_gr : subinstr local gr " " "+" , all
mark `tag' if indexnot(`concat_gr',"?") != 0
set seed `seed'
qui egen long `dtrank' = rank(uniform()) if `tag' , unique
qui foreach var of local gr {
gen _`var' = `var'
replace `var' = _`var'[`dtrank'] if `tag'
local droplist "`droplist' _`var'"
}
drop `tag' `dtrank' `droplist'
local droplist ""
local seed = c(seed)
}
sort `sortorder'
qui save `bfPERM', replace
bfsearch `Varlist' , maxvar(`maxvar') `Options'
...
}
end
*-------------------------------------------*
-- Jesper Kj�r Hansen
mailto:[email protected]
*
* For searches and help try:
* http://www.stata.com/support/faqs/res/findit.html
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/