Some nuances in understanding this code:
In the first pair of statements below, the -bys id- is essential as the
whole point is that minimum and maximum are to be determined within
-id-.
bys id: egen `min'=min(date)
bys id: egen `max'=max(date)
(In fact, the second -bys- could be just -by:-, because at that point we
know the data are sorted as desired.)
In the second pair of statements below, the -bys id- does no harm but is
dispensable. Once the minima and maxima have been determined, flagging
which observations equal them does not require the aegis of -by:-.
bys id: gen byte mindate=date==`min'
bys id: gen byte maxdate=date==`max'
They could therefore be
gen byte mindate=date==`min'
gen byte maxdate=date==`max'
Nick
[email protected]
Martin Weiss
You want your admdate to be numeric for sure. You could then -sort-
within
id and take the first and last value. A more general solution is:
**************
clear*
inp id str10 admdate
1 12may06
1 20jun06
1 30aug06
2 10may06
2 10sep06
2 20dec06
2 10jan07
3 10aug06
3 20sep06
3 10dec06
3 15jan07
3 10feb07
end
compress
gen date=date(admdate, "DM20Y")
format date %tdMonth_DD,_CCYY
list, noobs
tempvar min max
bys id: egen `min'=min(date)
bys id: egen `max'=max(date)
bys id: gen byte mindate=date==`min'
bys id: gen byte maxdate=date==`max'
list, noobs sepby(id)
Thomas Cars
I have a dataset including subjects (id) and date for administration
of a specific drug (adm.date)
I now want to construct a variable telling me which one of the
observations (adm.date) in each subject (id) that has the lowest date
(min) and the highest date(max).
The number of adm.date can vary in each subject from 1 to 10.
Example (min=1 och max=2)
Id adm.date min/max
1 12may06 1
1 20jun06
1 30aug06 2
2 10may06 1
2 10sep06
2 20dec06
2 10jan07 2
3 10aug06 1
3 20sep06
3 10dec06
3 15jan07
3 10feb07 2
And so on?
*
* 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/