建立具有特定数据的表格

时间:2018-10-23 11:35:31

标签: matlab

在完成一项任务时,我需要一些帮助:

我有4个带有数据的向量:其中3个带有日期,第四个带有日期,就像这样:

dateAdded      dueDate    date       overdue
                         Published   
02/11/18       02/11/18   03/11/18    1
03/11/18       04/11/18   11/11/18    7
03/11/18       04/11/18   04/12/18    30
04/11/18       05/11/18   ongoing     overdue up to today

您能给我一些提示吗,考虑到当我从一个月过渡到另一个月时,我必须计算两个月的逾期情况,因此如何创建一个包含一年中每个月的逾期天数的表?另外,当datePublished还没到时,我必须计算每个月过去的逾期日期。

谢谢

1 个答案:

答案 0 :(得分:0)

我的解决方案:

  number_months = max(((year(dateAdded)-2018))*12 + rem(month(dateAdded),13));

idx = 1;
ii=1;

for k=1:number_months
      kpit(k,1) = k;
      kpit(k,2) = 0;
      kpit(k,3) = 0;
end



for i=1:data_length_Added
      %         if month(dateAdded(i)) == month(dueDate(i)) && month(dateAdded(i)) ~= 0
      if month(dueDate(i)) == month(datePublished(i)) && month(dateAdded(i)) ~= 0
            [~,idx]=ismember(month(dueDate(i)),kpit(:,1),'rows');% finds the position of an element from the array in the array for months

            kpit(idx,2) =kpit(idx,2) + overdue(i);
            kpit(idx,3) = kpit(idx,3) + 1;
            idx = idx + 1;
      else if month(datePublished(i)) == month(dueDate(i)) + 1
                  [~,idx]=ismember(month(dueDate(i)),kpit(:,1),'rows');
                  [~,idx1]=ismember(month(datePublished(i)),kpit(:,1),'rows');
                  year1 = year(datePublished(i));
                  weight = (day(datePublished(i)))/eomday(year1,month(datePublished(i)));
                  kpit(idx,2) =kpit(idx,2) + overdue(i);
                  kpit(idx1,2) =kpit(idx1,2) + overdue(i)*weight;
                  kpit(idx,3) = kpit(idx,3)+ 1;
                  kpit(idx1,3) = kpit(idx1,3)+ 1;
                  if (month(datePublished(i)) ~= 0 && month(datePublished(i)) > month(dueDate(i))+1)
                        %                                if (datePublished > dueDate)% If the correction is done check every month if it is the next one
                        [~,idx]=ismember(month(datePublished(i)),kpit(:,1),'rows');
                        year1 = year(datePublished(i));
                        weight = day(datePublished(i))/eomday(year1,month(datePublished(i))); %Should count all overdue days for full months and weighted overdue dats for not full months
                        kpit(idx,2) = overdue(i)*weight;
                        kpit(idx,3) = kpit(idx,3) + 1;
                        for j=(month(datePublished(i))-1):month(dueDate(i))
                              [~,idx]=ismember(month(datePublished(j)),kpit(:,1),'rows');
                              kpit(idx,2) =kpit(idx,2) + overdue(j);
                              kpit(idx,3) = kpit(idx,3)+ 1;
                              j = j +1;
                        end
                  end
            end
      end
      else if month(dueDate(i)) == 0
                  [~,idx]=ismember(month(today),kpit(:,1),'rows');
                  year1 = year(today);
                  weight = day(today)/eomday(year1,month(today)); %Should count all overdue days for full months and weighted overdue dats for not full months
                  kpit(idx,2) = overdue(i)*weight;
                  kpit(idx,3) = kpit(idx,3) + 1;
                  for j=(month(today)-1):month(dueDate(i))
                        [~,idx]=ismember(month(today),kpit(:,1),'rows');
                        kpit(idx,2) =kpit(idx,2) + overdue(j);
                        kpit(idx,3) = kpit(idx,3)+ 1;
                        j = j +1;
                  end
            end
end