Notice: On March 31, it was **announced** that Statalist is moving from an email list to a **forum**. The old list will shut down on April 23, and its replacement, **statalist.org** is already up and running.

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

From |
Kaspar Dardas <kaspar.dardas@students.ebs.edu> |

To |
statalist@hsphsun2.harvard.edu |

Subject |
Re: st: AW: alternative to forvalues combined with bysort, by |

Date |
Mon, 28 Jun 2010 14:43:22 +0200 |

Hey Martin, -egen, tag()- takes a -varlist-, as far as I can see from its help file, but does Stata allow you to add the "& inrange()..." part w/o error? Yep, absolutely. I get exactly what I need with this code but unfortunately only for the entire datatset. I have taken the code from: http://www.stata.com/statalist/archive/2008-08/msg00107.html Maybe bysort does not work because of this. However, for one single dataset it works absolutely fine. Do you think (egen, tag()- takes a -varlist-, as far as I can see from its help file, but does Stata allow you to add the "& inrange()...") is the problem, after all? Thanks Martin and best, Kaspar 2010/6/28 Martin Weiss <martin.weiss1@gmx.de>: > > <> > > > " By the way, your > solution "(forv i=1/`=_N'{" gets the exact same results as "quietly > forvalues i = 1/`N' {"" > > > > Again sorry, you defined a -local- up there which contained _N. But still, my line does it all in one, while you need two. > > > > " The easiest way would be to drop the remaining seven countries and do > all this eight times. However, I would like to find a better solution. > Maybe you have one last advice on this for me. Thanks for all of your > help again!" > > > This is not the easiest way, and I do not know of a single problem that requires you to -drop- outright. As I said earlier, the solution to this kind of problem is -bysort-, as described by NJC in http://www.stata-journal.com/sjpdf.html?articlenum=pr0004. Looping over all rows of the data, as in > > -forv i=1/`=_N'- > > is rarely necessary in Stata. > > > > " In each country 10000. > > --> egen tag = tag(transactionid) & inrange(eventdate, eventdate[`i'] > - 365, eventdate[`i'])" > > > -egen, tag()- takes a -varlist-, as far as I can see from its help file, but does Stata allow you to add the "& inrange()..." part w/o error? > > > HTH > Martin > > > -----Ursprüngliche Nachricht----- > Von: owner-statalist@hsphsun2.harvard.edu [mailto:owner-statalist@hsphsun2.harvard.edu] Im Auftrag von Kaspar Dardas > Gesendet: Montag, 28. Juni 2010 14:28 > An: statalist@hsphsun2.harvard.edu > Betreff: Re: st: AW: alternative to forvalues combined with bysort, by > > Hi Martin, > > thanks for all the help and effort. You definitely do not have to be > sorry. Its me who doesn't understand this stuff. Well, I am still > struggling with it. I think, however, I know where the problem is but > my Stata knowledge is just too bad to solve it. By the way, your > solution "(forv i=1/`=_N'{" gets the exact same results as "quietly > forvalues i = 1/`N' {" > > My actual problem is that I want to tag all "transactionsids" in ONE > country 365 days prior to the current transaction. There are about > 80000 transactions. In each country 10000. > > --> egen tag = tag(transactionid) & inrange(eventdate, eventdate[`i'] > - 365, eventdate[`i']) > > All of this works fine for one country (whenever I drop the other 7 > countries). However, whenever I try to use double loop version I still > get the results for my entire datasample. Thus, (very simply speaking) > all eight countries are treated as one. I think this has something do > with > > local N = _N > qui forval i = 1/`N' { (or your version forv i=1/`=_N) > > the _N refers to the entire dataset but I need somehow to apply the _N > for each country separately so not for 80000 but rather for 8*10000 > observations. Stata also does not allow to use > > bysort location: local N = _N > > The easiest way would be to drop the remaining seven countries and do > all this eight times. However, I would like to find a better solution. > Maybe you have one last advice on this for me. Thanks for all of your > help again! > > > Best, > > Kaspar > > 2010/6/28 Martin Weiss <martin.weiss1@gmx.de>: >> >> <> >> >> Re your assertion that -bysort- and -forvalues- do not work together: This has never been a problem for me, since -bysort- is so incredibly useful and versatile. For an intro, see NJC`s http://www.stata-journal.com/sjpdf.html?articlenum=pr0004 >> >> >> >> HTH >> Martin >> >> >> -----Ursprüngliche Nachricht----- >> Von: owner-statalist@hsphsun2.harvard.edu [mailto:owner-statalist@hsphsun2.harvard.edu] Im Auftrag von Martin Weiss >> Gesendet: Montag, 28. Juni 2010 13:19 >> An: statalist@hsphsun2.harvard.edu >> Betreff: AW: st: AW: alternative to forvalues combined with bysort, by >> >> >> <> >> >> Sorry about my mistake, I never noticed you had a loop nested in there, b/c of the -quietly- command in front of it. One of the problems in your code is >> >> ************* >> quietly forvalues i = 1/`N' { >> ************* >> >> which should be - forv i=1/`=_N'{- >> >> >> HTH >> Martin >> >> -----Ursprüngliche Nachricht----- >> Von: owner-statalist@hsphsun2.harvard.edu [mailto:owner-statalist@hsphsun2.harvard.edu] Im Auftrag von Kaspar Dardas >> Gesendet: Montag, 28. Juni 2010 12:30 >> An: statalist@hsphsun2.harvard.edu >> Betreff: Re: st: AW: alternative to forvalues combined with bysort, by >> >> Martin, >> >> thanks for the prompt reply. Nesting two forvalues loops in a similar >> fashion as my second solution which includes "foreach" ? I think you >> are referring to something that I have already tried and showed in my >> firs email, correct? Or did you mean something else? I think my first >> email might have been not very precise. Again, my first command in the >> below email should run over 8 countries. My second command is my >> (failed) approach to solve it (which I think is similar to nesting two >> forvalues loops) >> >> Best, >> >> Kaspar >> >> 2010/6/28 Martin Weiss <martin.weiss1@gmx.de>: >>> >>> <> >>> >>> >>> You may want to nest two -forvalues- loops... >>> >>> >>> >>> HTH >>> Martin >>> >>> >>> -----Ursprüngliche Nachricht----- >>> Von: owner-statalist@hsphsun2.harvard.edu [mailto:owner-statalist@hsphsun2.harvard.edu] Im Auftrag von Kaspar Dardas >>> Gesendet: Montag, 28. Juni 2010 12:11 >>> An: statalist@hsphsun2.harvard.edu >>> Betreff: st: alternative to forvalues combined with bysort, by >>> >>> Hello, >>> >>> I would like to run the below forvalues loop for several countries >>> ("locations") in one large dataset. Thus, I simply need to repeat this >>> loop for subsets in one large dataset in the same fashion as the >>> bysort: command would provide. "bysort:" , however, cannot be combined >>> with forvalues. >>> >>> local N = _N >>> gen count = . >>> qui forval i = 1/`N' { >>> egen tag = tag(transactionid) if gvkey == gvkey[`i'] & >>> inrange(eventdate, eventdate[`i'] - 365, eventdate[`i']) >>> count if tag >>> replace count = r(N) in `i' >>> drop tag >>> } >>> >>> Therefore, I have tried a foreach loop: >>> >>> foreach x in location { >>> gen count_all_trades = . if location == `x' >>> quietly forvalues i = 1/`N' { >>> egen tag = tag(transactionid) if location == `x' & >>> inrange(eventdate, eventdate[`i'] - 365, eventdate[`i']) >>> count if tag & location == `x' >>> replace count_all_trades = r(N) in `i' if location == `x' >>> drop tag >>> } >>> } >>> >>> However, this does not give me the correct solution. Is there anything >>> similar to the "bysort:" command which can be used in combination with >>> the forvalues command? >>> Again, I simply need to rerun the first command for 8 different >>> countries in one large dataset. Alliteratively, I could also split my >>> dataset into 8 subsamples and run the above code 8 times. However, I >>> would like to find a more "elegant" way to solve this problem. >>> >>> Best regards, >>> >>> Kaspar >>> * >>> * 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/ >>> >> >> * >> * 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/ >> >> >> * >> * 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/ > > > * > * 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/

**Follow-Ups**:**AW: st: AW: alternative to forvalues combined with bysort, by***From:*"Martin Weiss" <martin.weiss1@gmx.de>

**References**:**st: alternative to forvalues combined with bysort, by***From:*Kaspar Dardas <kaspar.dardas@students.ebs.edu>

**Re: st: AW: alternative to forvalues combined with bysort, by***From:*Kaspar Dardas <kaspar.dardas@students.ebs.edu>

**Re: st: AW: alternative to forvalues combined with bysort, by***From:*Kaspar Dardas <kaspar.dardas@students.ebs.edu>

- Prev by Date:
**AW: st: AW: alternative to forvalues combined with bysort, by** - Next by Date:
**AW: st: AW: alternative to forvalues combined with bysort, by** - Previous by thread:
**AW: st: AW: alternative to forvalues combined with bysort, by** - Next by thread:
**AW: st: AW: alternative to forvalues combined with bysort, by** - Index(es):