On Thu, 19 Nov 2009, yinung at Gmail wrote:
How can I generate a Monday dummy if the daily data is on a
irregular
week base, for example, djclose.gdt?
You can't expect this to be super-simple, can you? But here
goes...
<script>
function scalar day_of_week (scalar yr, scalar mo, scalar day)
# returns 0 = monday, 1 = Tuesday, ...
# See Uspensky and Heaslet, Elementary Number Theory (1939)
scalar c, d, i1, i2, i3
if (mo < 3)
yr--
mo += 10
else
mo -= 2;
endif
c = yr / 100
d = yr % 100
i1 = int(floor(2.6 * mo - 0.2) % 7)
i2 = int(floor(d / 4.0) % 7)
i3 = int(floor(c / 4.0) % 7)
return ((day%7)+i1+(d%7)+i2+i3-((2*c)%7))%7
end function
open djclose.gdt
scalar T = $nobs
scalar yr, mo, day
string datestr
series monday = 0
set messages off
loop i=1..T -q
smpl i i
outfile date.txt --write
print djclose -o
outfile --close
string date = $(tail -n+4 date.txt | head -1 | awk '{print $1}')
sscanf date, "%d/%d/%d", &yr, &mo, &day
printf "yr = %d, mo = %d, day = %d\n", yr, mo, day
scalar dow = day_of_week(yr, mo, day)
if dow == 0
monday[i] = 1
endif
endloop
smpl --full
print djclose monday -o
</script>
If you're on MS Windows and don't have the basic text-processing
tools tail, head and awk, go to
gnuwin32.sourceforge.net for
salvation.
Allin Cottrell