我有三个列向量(300x1(Date、VariousA、Amount,我想根据日期时间向量(Date(对我的每一行列向量进行计算。如果日期没有更改,则计算中的金额也不应更改。如果日期发生了变化,我想将上一个日期的所有计算结果相加,并将总和添加到上一日期的金额中。
以下示例基于下表:
首先,"数量矢量"仅在第一行中包含一个值(100(。计算得出60。由于下一行的日期保持不变,因此金额也保持不变-计算结果为30。由于第3行中的日期发生了更改,我现在想调整我的金额。上一日期的结果之和为90,应添加到上一日期金额中。第3行中的新金额因此为190,计算得出85.5需要添加到下一行的190上,因为第4行的日期再次更改,依此类推…
我希望它已经变得清晰起来。有人能帮忙吗?
非常感谢!
| Date | VariousA | Amount | Result | HelpColumn |
|------------- |---------- |-------- |-------- |-------------- |
| 28-Jul-2001 | 0.6 | 100 | 60 | 100*0.6 |
| 28-Jul-2001 | 0.3 | 100 | 30 | 100*0.3 |
| 29-Jul-2001 | 0.45 | 190 | 85.5 | 190*0.45 |
| 04-Aug-2001 | -0.7 | 275.5 | -192.5 | 275.5*(-0.7) |
| 04-Aug-2001 | 0.1 | 275.5 | 27.55 | 275.5*0.1 |
| 05-Aug-2001 | 0.4 | 110.55 | 44.22 | 110.55*0.4 |
编辑:我已经想出了这个代码,但它根本不起作用:
if i>1 & Date(i)>Date(i-1)
Amount(i) = sum(Result(find(Date==Date(i-1)))) + Amount(i-1);
elseif i>1 & Date(i)==Date(i-1)
Amount(i) = Amount(i-1);
end
Result(i)=VariousA(i)*Amount(i);
我不太确定,但这就是你想要的吗?
DateString = {'07/28/2001';'07/28/2001';'07/29/2001';'08/04/2001';'08/04/2001';'08/05/2001'};
formatIn = 'mm/dd/yyyy';
Date=datevec(DateString,formatIn);
VariousA=[0.6;0.3;0.45;-0.7;0.1;0.4];
Amount=[100;0;0;0;0;0];
Result=zeros(length(VariousA),1);
k=1;
for i=1:1:length(VariousA)
if i>1
Amount(i)=Amount(i-1);
if sum(Date(i,:)>Date(i-1,:))>0
for j=1:1:k
Amount(i)=Amount(i)+Result(i-j);
end
k=1;
else
k=k+1;
end
end
Result(i)=VariousA(i)*Amount(i);
end