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: simulataneous foreach loops
From
Nick Cox <[email protected]>
To
"'[email protected]'" <[email protected]>
Subject
RE: st: simulataneous foreach loops
Date
Tue, 16 Nov 2010 11:50:25 +0000
The first solution shows an impressive grasp of technique, but it's a bit like building a tank so that you can drive to the nearest convenience store. The second solution and Nick Winter's solution
local tnums 101 102 103
local tsizes 3 5 3
forval i=1/3 {
local team : word `i' of `tnums'
local size : word `i' of `tsizes'
di "Team `team' will have `size' members"
}
show that the same ends can be achieved with much simpler machinery.
Nick
[email protected]
Sergiy Radyakin
. do C:\temp\listdbl.do
.
. // ------------ SOLUTION WITH CLASSES ---------------
.
. class bstrap_plan {
. array teams = {102,108,202}
. array membs = { 3, 5, 3}
. }
.
. .P=.bstrap_plan.new
.
. local npairs `.P.teams.arrnels'
. forvalues i=1/`npairs' {
2.
. local team `.P.teams[`i']'
3. local memb `.P.membs[`i']'
4.
. preserve
5. //bsample `memb'
. //replace team=`team'
. //save simteam_`team'.dta, replace
. display `team' " " `memb'
6. restore
7. }
102 3
108 5
202 3
.
.
. // ------------ SOLUTION WITH MATRICES --------------
. matrix P = 102,3\108,5\202,3
.
. local npairs=rowsof(P)
. forvalues i=1/`npairs' {
2.
. local team=P[`i',1]
3. local memb=P[`i',2]
4.
. preserve
5. //bsample `memb'
. //replace team=`team'
. //save simteam_`team'.dta, replace
. display `team' " " `memb'
6.
. restore
7. }
102 3
108 5
202 3
.
.
end of do-file
And as a bonus we get the plan matrix in a readable form (add row and
column headers to taste):
. matrix list P
P[3,2]
c1 c2
r1 102 3
r2 108 5
r3 202 3
Best, Sergiy
PS: uncomment the bootsrap part in both procedures above
On Fri, Nov 12, 2010 at 2:45 PM, Lim, Raymond <[email protected]> wrote:
> I preserve before the loop in my actual code. The loop right now creates team 101 with 3 members, team 102 with 5 members, team 103 with 3 members, etc. Yes, there's a one-to-one mapping from tt to NN. I basically need two loop indices to change simultaneously. For example, first round (i=103, j=3), second round (i=139, j=5), third round (i=230, j=3). Of course, the real thing is a couple hundred pairs.
>
> -Raymond
>
> preserve
> local tt=100
> qui foreach NN of numlist 3 5 3 4 {
> bsample `NN'
> local tt=`tt'+1
> replace team=`tt'
> save simteam_`tt'.dta, replace
> restore
> preserve
> }
>
*
* For searches and help try:
* http://www.stata.com/help.cgi?search
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/