Unfortunately we don’t know how your data is structured, so to help you we’ll assume that your time series is something like:
Ano = 2014:
Janeiro = [1 2 7 8 9];
Fevereiro = [3 4 5];
Março = [5 2 5 0]
.
.
.
etc
The same principle would be for the year 2013, etc, etc!
The first recommendation is to put your values in Structs, this will facilitate data manipulation, we are talking about putting your data this way:
A2014 = struct('1', [1 2 7 8 9], '2',[3 4 5], '3',[5 2 5 0], '4',[9 2 0 0], '5',[33 1 5 90 200], '6',[82 4], '7',[5 2 5 0], '8',[31 6], '9',[9 0 3 4 5], '10',[2 0], '11',[7], '12',[2 9 0 3]);
A2013 = struct('1', [4 7 5], '2',[2 3 6 6], '3',[22 3 4 5], '4',[1 3 3 5], '5',[9 6 5 5 20], '6',[1 3 5 4], '7',[4 0], '8',[1 5 6 6], '9',[3 5 5], '10',[1 4 4], '11',[2 7 5], '12',[5 5 5 1]);
I generated random values and different sizes, but that doesn’t matter, just to show you the concept, notice that I assign each month with its corresponding number, each year receives a struct with the time series of each month.
Logic can be done in different ways, imagine the following entry:
anodesejado = XXXX
mesdesejado = X
The equation for walking between the months/year would be (12 - (13-mesdesejado)), if the calculation is equal to zero(0) walk from mesdesejado up to the month 12 of anodesejado-1, if the calculation is different from zero(0) walk from mesdesejado up to the month 12 of anodesejado-1 and of 1 until (12 - (13-mesdesejado)) of anodesejado.
Of course don’t forget to add your values inside each loop and at the end divide by 12, so you’ll get your average!
Follows the logic described above in Matlab code:
%Entre com os valores desejados
anodesejado = 2014
mesdesejado = 1
A2014 = struct('1', [1 2 7 8 9], '2',[3 4 5], '3',[5 2 5 0], '4',[9 2 0 0], '5',[33 1 5 90 200], '6',[82 4], '7',[5 2 5 0], '8',[31 6], '9',[9 0 3 4 5], '10',[2 0], '11',[7], '12',[2 9 0 3]);
A2013 = struct('1', [4 7 5], '2',[2 3 6 6], '3',[22 3 4 5], '4',[1 3 3 5], '5',[9 6 5 5 20], '6',[1 3 5 4], '7',[4 0], '8',[1 5 6 6], '9',[3 5 5], '10',[1 4 4], '11',[2 7 5], '12',[5 5 5 1]);
soma=0;
if (12 - (13-mesdesejado)) == 0
for M=mesdesejado:12
soma = soma + sum(eval(["A" num2str(anodesejado-1)]).(num2str(M)));
end
else
for M=mesdesejado:12
soma = soma + sum(eval(["A" num2str(anodesejado-1)]).(num2str(M)));
end
for M=1:(12 - (13-mesdesejado))
soma = soma + sum(eval(["A" num2str(anodesejado)]).(num2str(M)));
end
end
media = soma/12
Ederwander, thank you for your reply, I will try to implement it.
– Daylton Guedes