Thought some of you would be interested.  There is a little unix worked in 
here...

I have a lot of temperature data in a giant file.  I think I got it by 
grabbing a bunch of different files on the web and putting them together. 
They are from a legitimate source.  In case you want to see the file, it 
is here:

http://taxa.epi.umn.edu/~mbmiller/temperature/all_temps.txt

That tells me all the temperature highs and lows for every day for the 99 
years from January 1, 1900 to December 31, 1998.  Using that file and some 
neat computer tricks, I put together the table below about last frosts for 
every spring for all 99 years.  The earliest final frost was on April 7, 
but that only happened once.  In 25% of years, the last frost was on April 
22 or earlier.  In 50% of years the last frost was on April 28 or earlier. 
It's really only safe to plant after May 24, but it's 90% safe after May 
15.  I'd say that if our weather forecast predicts no cold weather for a 
few days, you can be safe even a little earlier.

On Sunday afternoon our 103-year-old neighbor told us there would be no 
more frost this year.  He also called me "Tom" so I have to wonder if he 
was thinking clearly.  I'd say that we have about a 90% chance of at least 
one more frost before summer.

Mike


tail +12 all_temps.txt | head -36159 | gawk '$2 < 8 && $5 < 33 {print $0}' > junk

# in tcsh shell:

foreach year ( `seq 1900 1998` )
   grep ^$year junk | tail -1 >>! junk_2
end

gawk '{print $2" "$3}' junk_2 | numalign | sort -n | uniq -c | perl -pe 's/^   (.) (.) (..)$/     $1      $2\/$3/' > ! output.txt

numalign is here:
http://taxa.epi.umn.edu/misc


   Last Spring Frosts for Years 1900-1998
  ========================================
  Frequency  Date  Chance of No More Frost
  ---------  ----  -----------------------
      1      4/ 7
      1      4/ 8
      2      4/ 9
      1      4/10    5%
      1      4/11
      1      4/12
      1      4/13
      1      4/14
      2      4/15   10%
      1      4/19
      3      4/20
      4      4/21
      6      4/22   25%
      4      4/23
      5      4/24
      2      4/25
      5      4/26
      6      4/27
      3      4/28   50%
      1      4/29
      3      4/30
      4      5/ 1
      4      5/ 2
      5      5/ 3   67%
      1      5/ 5
      3      5/ 6
      3      5/ 7
      1      5/ 8   75%
      2      5/ 9
      3      5/10
      4      5/12
      4      5/13
      3      5/15   90%
      1      5/16
      2      5/17
      1      5/18   95%
      1      5/20
      1      5/22
      1      5/23
      1      5/24   99%