[Gretl-users] change frequency

Allin Cottrell cottrell at wfu.edu
Wed Nov 18 22:59:37 EST 2009


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


More information about the Gretl-users mailing list