Bookmark and Share

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]

st: AW: Using egen and by efficiently when some observations are missing


From   "Martin Weiss" <martin.weiss1@gmx.de>
To   <statalist@hsphsun2.harvard.edu>
Subject   st: AW: Using egen and by efficiently when some observations are missing
Date   Thu, 22 Apr 2010 18:00:56 +0200

<> 

To solve these things, you have to get creative and note that -egen-
functions often take expressions as arguments, as duly shown in the relevant
sections of -help egen-:


*************
bys country: egen count_i_alt = total((condition==1)*(!mi(i)))
*************


BTW, the max operator projects the "tmp" value into the rows that end up
with missings after the first -egen- call, right? Is this really all you
want out of it, or am I missing anything here?

********
clear*

inp byte(country:mylabel i condition), automatic
A 2 1
A 3 .
A 4 0
A . 1
A . .
A . 1
B 2 1
B 3 .
B 4 0
B 1 .
B . 1
B 3 1
end

bys country: egen tmp = count(i) if condition == 1
bys country: egen count_i = max(tmp)

bys country: egen count_i_alt = total((condition==1)*(!mi(i)))

li, sepby(country) noo
********



HTH
Martin


-----Ursprüngliche Nachricht-----
Von: owner-statalist@hsphsun2.harvard.edu
[mailto:owner-statalist@hsphsun2.harvard.edu] Im Auftrag von Paul Novosad
Gesendet: Donnerstag, 22. April 2010 17:25
An: statalist@hsphsun2.harvard.edu
Betreff: st: Using egen and by efficiently when some observations are
missing

Dear list,

It often takes me three lines to generate variables based on
conditional group operations using egen.  For example, I want to run
some egen operation on a subset of the data, such as a count.  But I
want the count to exist even when the condition does not hold.  I use
the following:

by country: egen tmp = count(i) if condition == 1
by country: egen count_i = max(tmp)
drop tmp

I write code like this all over the place, and each time it makes my
heart sink.  It feels inefficient but I do not have another solution.
Can someone recommend a more efficient practice?

Thanks,

Paul
*
*   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/


© Copyright 1996–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   Site index