<>
Mike,
you are quite right, the original code was suitable for situation where you have only one country. One of the more obvious problems with your adaptation to the new situation was that the -local- "j" continued to run from zero when you switched to the second country.
Still, the code below manages to deal with multiple countries.
***
clear*
inp cntry:mylabel byte id str10 date byte revenue, auto
arg 1 8-Mar-07 1
arg 2 15-Mar-07 2
arg 3 15-Mar-07 3
arg 4 22-Mar-07 4
arg 5 29-Mar-07 5
arg 6 29-Mar-07 6
arg 7 5-Apr-07 7
arg 8 5-Apr-07 8
bel 1 8-Mar-07 10
bel 2 15-Mar-07 20
bel 3 15-Mar-07 30
bel 4 22-Mar-07 40
bel 5 29-Mar-07 50
bel 6 29-Mar-07 60
bel 7 5-Apr-07 70
end
gen int mydate=date(date, "DM20Y")
form mydate %tdMonth_DD,_CCYY
drop date
tempname hdle
postfile `hdle' cntry id newvar /*
*/ using info, replace
su cntry, mean
forv cnt=`r(min)'/`r(max)'{
preserve
keep if cntry==`cnt'
d
gen byte newvar=.
loc j 0
levelsof id
foreach lev in `r(levels)'{
egen mytotal`lev'=total(inrange(mydate, mydate[`lev']-14, /*
*/ mydate[`lev'])*revenue)
loc ++j
replace newvar=mytotal`lev'-revenue[`lev'] in `j'
post `hdle' (`cnt') (`lev') (newvar[`j'])
}
restore
}
postclose `hdle'
merge 1:1 cntry id using info.dta, nogenerate noreport
list, noo sepby(cntry)
***
HTH
Martin
-------- Original-Nachricht --------
> Datum: Mon, 28 Dec 2009 13:50:45 -0600
> Von: "Mike Kim" <[email protected]>
> An: [email protected]
> Betreff: Re: st: Creating a variable
> <>
>
> Thank you very much, Martin and Eric. I have a follow-up question. The
> data
> structure is repeated by country and I have around 60 countries. So, I
> modified Martin's foreach loop, but it works only for the first country.
> The
> result is wrong for the remaining countries. Can you please advise me what
> is wrong?
>
> Mike.
>
> * I tried only two countries in the code below:
> * The data structure is like this and the number of id is different for
> each
> country.
>
> inp str10 country byte id str10 date byte revenue
> arg 1 8-Mar-07 1
> arg 2 15-Mar-07 2
> arg 3 15-Mar-07 3
> arg 4 22-Mar-07 4
> arg 5 29-Mar-07 5
> arg 6 29-Mar-07 6
> arg 7 5-Apr-07 7
> arg 8 5-Apr-07 8
> bel 1 8-Mar-07 10
> bel 2 15-Mar-07 20
> bel 3 15-Mar-07 30
> bel 4 22-Mar-07 40
> bel 5 29-Mar-07 50
> bel 6 29-Mar-07 60
> bel 7 5-Apr-07 70
> end
>
> encode country, gen(cntry)
> drop country
>
> gen int mydate=date(date, "DM20Y")
> form mydate %tdMonth_DD,_CCYY
> drop date
>
> gen byte newvar=.
> forv i=1/2 {
> loc j 0
> levelsof id
> foreach lev in `r(levels)'{
> egen mytotal`lev'=total(inrange(mydate, mydate[`lev']-14,
> mydate[`lev'])*revenue) if cntry==`i'
> loc ++j
> replace newvar=mytotal`lev'-revenue[`lev'] in `j' if cntry==`i'
> }
> drop mytotal*
> }
>
> ----- Original Message -----
> From: "Martin Weiss" <[email protected]>
> To: <[email protected]>
> Sent: Monday, December 28, 2009 3:49 AM
> Subject: Re: st: Creating a variable
>
>
> <>
>
> Mike may want to try this code. It is not as elegant as I (and Eric
> apparently) had hoped for, but it works.
>
> ***
> clear*
>
> inp byte id str10 date byte revenue
> 1 8-Mar-07 1
> 2 15-Mar-07 2
> 3 15-Mar-07 3
> 4 22-Mar-07 4
> 5 29-Mar-07 5
> 6 29-Mar-07 6
> 7 5-Apr-07 7
> 8 5-Apr-07 8
> end
>
> gen int mydate=date(date, "DM20Y")
> form mydate %tdMonth_DD,_CCYY
> drop date
>
> gen byte newvar=.
> loc j 0
> levelsof id
>
> foreach lev in `r(levels)'{
> egen mytotal`lev'=total(inrange(mydate, mydate[`lev']-14,
> mydate[`lev'])*revenue)
> loc ++j
> replace newvar=mytotal`lev'-revenue[`lev'] in `j'
> }
>
> drop mytotal*
>
> list, noo
> ***
>
>
> HTH
> Martin
> -------- Original-Nachricht --------
> > Datum: Sun, 27 Dec 2009 22:11:06 -0600
> > Von: "Mike Kim" <[email protected]>
> > An: [email protected]
> > Betreff: st: Creating a variable
>
> > Dear all,
> >
> > I would like to create a variable that adds all revenues from all OTHER
> id
> > within the past 14 days (including current date). How can I create the
> > "newvar" in the following example?
> >
> > id date revenue newvar
> > 1 8-Mar-07 1 0
> > 2 15-Mar-07 2 4 (=1+3)
> > 3 15-Mar-07 3 3 (=1+2)
> > 4 22-Mar-07 4 6 (=1+2+3)
> > 5 29-Mar-07 5 15 (=2+3+4+6)
> > 6 29-Mar-07 6 14 (=2+3+4+5)
> > 7 5-Apr-07 7 23 (=4+5+6+8)
> > 8 5-Apr-07 8 22 (=4+5+6+7)
> > ......
> >
> >
> > Thank you in advance.
> > Mike.
> >
> > *
> > * 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/
>
> --
> Jetzt kostenlos herunterladen: Internet Explorer 8 und Mozilla Firefox 3.5
> -
> sicherer, schneller und einfacher! http://portal.gmx.net/de/go/atbrowser
> *
> * 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/
>
> *
> * 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/
--
Jetzt kostenlos herunterladen: Internet Explorer 8 und Mozilla Firefox 3.5 -
sicherer, schneller und einfacher! http://portal.gmx.net/de/go/chbrowser
*
* 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/