MATLAB: Time series 30 year sliding window

30 yearaveragemovingseriesslidingtimewindow

I have a set of daily data that ranges from the years 1772-2009. The data is currently in an array that has one column as the date number and one column as my data. I want to set 30 year sliding windows for this data moving a year on every time. For example I want the data to be in an array where the first column has all the data from 1772-1801, the 2nd has all the data from 1773-1802 and so on.
Each value has a corresponding date to it (year, month and day). It would be nice to be able to program MATLAB to take all the values corresponding to the years in the ranges I need.
For example I want to say something along these lines, I just dont know the exact code or if what I want to do is even possible: I already have data = my daily data
for y=1772:1979
30yearperiods(:,1,2,3…207) = temp (dependent on year== n to n+30)
Does anyone know how I can do this?
I have had major problems trying to set for loops that encompass the 30 year periods including all the leap years etc and its frustrating having to do this when I have the data I need and I just can't extreact it

Best Answer

Since not all 30-year periods contain the same number of dates (due to leap year), you'll need to use cell array to have the 30-year moving window data. It's a matter of utilizing the datenum() function.
clear;
%create an example data
StartYear=1772;
EndYear=2009;
OrigData=datenum(StartYear,1,1):(datenum(EndYear,1,1)-1);
OrigData=[OrigData',(1:length(OrigData))'];
%constrct the desired data
Period=30;
Data=cell(EndYear-StartYear-Period+1,1);
for Year=StartYear:(EndYear-Period)
StartCount=datenum(Year,1,1)-datenum(StartYear,1,1)+1;
DataCount=datenum(Year+Period,1,1)-datenum(Year,1,1);
Data{Year-StartYear+1}=OrigData(StartCount:(StartCount+DataCount-1),2);
end
>> OrigData(end,:)
ans =
733773 86563
>> Data{end}(end)
ans =
86563