2017-07-10 11 views
-1

私は日付の行列があると私は期間に、ラインによって、日付その集約したい:これらは私のコードは集計ベクター - MathWorks社のMATLABのforループと日付の行列

[01-01-2017;31-12-2017] [01-01-2018;31-12-2018] [01-01-2019;31-01-2019] 

です:

a=[ 20170206 20170506 20170806 20171106 20180206 20180506 20180806 20181106 
20190206 20190506; 
20170402 20180402 0 0 0 0 0 0 0 0; 
20170228 20170831 20180228 0 0 0 0 0 0 0; 
20171016 20181016 20191016 0 0 0 0 0 0 0; 
20171025 0 0 0 0 0 0 0 0 0]; %matrix with dates to aggregate 

[r1,c1]=size(a); 
p = [3;2;2;3;1]; %number of periods per line 

yi=[2017;2017;2017;2017;2017]; 
mi=[01;01;01;01;01]; 
di=[01;01;01;01;01]; 


[m,n]=size(p); 
datas(1:r1,1)=yi*10000+mi*100+di; 
for i=1:m 
    for j=2:p(i) 
    datas(1:r1,j)=(yi+j-1)*10000+mi*100+di; 
    end 
end 

広告私の結果は

件のデータを= [20170101 20180101 20190101です。 20170101 20180101 20190101; 20170101 20180101 20190101; 20170101 20180101 20190101; 20170101 20180101 20190101]

しかし、私はこのような行列たかった:

件のデータ= [20170101 20180101 20190101を。 20170101 20180101 0; 20170101 20180101 0; 20170101 20180101 20190101; 20170101 0 0

+0

[mcve]を入力し、問題を明確に指定してください(現在の出力はどうなっていますか)。 – m7913d

+0

@ m7913dはすでに明確になっています。 –

+0

@ m7913dはすでにありがたくありがとう –

答えて

0
a=[ 20170206 20170506 20170806 20171106 20180206 20180506 20180806 20181106 20190206 20190506; 
    20170402 20180402 0 0 0 0 0 0 0 0; 
    20170228 20170831 20180228 0 0 0 0 0 0 0; 
    20171016 20181016 20191016 0 0 0 0 0 0 0; 
    20171025 0 0 0 0 0 0 0 0 0]; %matrix with dates to aggregate 

[r1,c1]=size(a); 
p = [3;2;2;3;1]; %number of periods per line 

[m,n]=size(p); 
max=max(p); 


yi=[2017;2017;2017;2017;2017]; 
mi=[01;01;01;01;01]; 
di=[01;01;01;01;01]; 

datas(1:r1,1)=yi(1:r1)*10000+mi(1:r1)*100+di(1:r1); 

for i=1:r1 
    for j=2:max 
     if p(i)<j 
      datas(i,j)=0; 
     else 
      datas(i,j)=(yi(i)+j-1)*10000+mi(i)*100+di(i); 
     end 
    end 
end