With dates, elegance usually goes out of the window.
I'd do it the other way round.
gen season = 1 if date >= mdy(12,21,year(date)) | date < mdy(3,20,year(date))
replace season = 2 if inrange(date,mdy(3,21,year(date)),mdy(6,20,year(date))
replace season = 3 if inrange(date,mdy(6,21,year(date)),mdy(9,21,year(date))
...
(not tested)
Nick
[email protected]
Thomas Speidel
> Apologies if this messages will be posted twice, but I'm
> having difficulties
> posting today from my work account.
>
> I am attempting to create a "season" variable based on a date
> variable. The
> solstice start dates are Dec-21, Mar-21, Jun-21 and Sep-22
> for Winter(1),
> Spring(2), Summer(3) and Autumn(4) respectively. I have
> tried to accomplish
> this using a rather long series of logical operators such as:
>
> gen month=month(date)
> gen day=day(date)
> gen season=1 if (month>=12 & day>=21) | (month>=1 & (month<=3
> & day<20))
> ...
>
> However, this code is not correct as it excludes all days>=20.
> Rather than adding more logical operators to condition upon
> the dates, I was
> wondering if anyone has a suggestion for a cleaner, more elegant code.
*
* For searches and help try:
* http://www.stata.com/support/faqs/res/findit.html
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/