1

我在下面显示的单元格数组中有一部分数据。我正在寻找一个过滤器来帮助我

  • 获取唯一代码列表(因为它们大约有 200 个)
  • 计算每个代码的出现次数(P0702,P0882)

在用户选择的任何开始日期和结束日期之间

    '1F'    '2013'  'd' '6/21/2013' ''  ''  'P0702' ''  ''  ''  ''  ''  ''  ''  ''  ''  ''  ''
    '1'     '2013'  'F' '9/17/2013' ''  ''  ''  ''  ''  'P0702' ''  ''  ''  ''  ''  ''  ''  ''
    '1FA'   '2014'  'F' '7/26/2014' ''  ''  ''  'P0702' ''  ''  ''  ''  ''  ''  ''  ''  ''  ''
    '1F'    '2014'  'r' '12/13/2014'    ''  ''  ''  ''  ''  ''  ''  ''  ''  ''  ''  ''  ''  'P0702'
    '1F'    '2013'  'F' '11/3/2014' ''  ''  ''  ''  'P0702' ''  ''  ''  ''  ''  ''  ''  ''  ''
    '1FA'   '2014'  'y' '6/27/2014' ''  ''  ''  ''  ''  ''  ''  ''  'P0702' ''  ''  ''  ''  ''
    '1FA'   '2013'  'j' '11/10/2014'    ''  ''  ''  ''  ''  ''  ''  ''  'P0702' ''  ''  ''  ''  ''
    '1FA'   '2013'  'y' '6/13/2014' ''  'P0702' ''  ''  ''  ''  ''  ''  ''  ''  ''  ''  ''  ''
    '1FAD'  '2013'  'j' '1/23/2014' ''  ''  ''  ''  ''  ''  ''  ''  'P0883' 'P0702' ''  ''  ''  ''
    '1FA'   '2013'  'k' '4/24/2015' ''  ''  ''  ''  ''  ''  ''  'P0702' ''  ''  ''  ''  ''  ''
    '1FAD'  '2014'  'm' '12/5/2014' ''  ''  ''  ''  ''  ''  ''  ''  ''  ''  'P0702' ''  ''  ''
    '1FA'   '2013'  'g' '6/29/2013' ''  ''  ''  ''  ''  ''  ''  ''  ''  'P0702' ''  ''  ''  ''
    '1FA'   '2013'  'u' '5/12/2015' ''  ''  ''  ''  ''  ''  ''  ''  'P0702' 'P0882' ''  ''  ''  ''
    '1FA'   '2013'  'u' '5/12/2015' ''  ''  ''  ''  ''  ''  ''  'P0702' ''  ''  ''  ''  ''  ''
    '1FA'   '2013'  'b' '5/15/2015' ''  ''  ''  ''  ''  ''  ''  'P0702' ''  ''  ''  ''  ''  ''
    '1FA'   '2013'  'y' '7/13/2014' ''  ''  ''  ''  ''  ''  ''  ''  ''  ''  'P0702' ''  ''  ''
    '1F'    '2013'  'j' '7/16/2014' ''  ''  ''  ''  ''  ''  ''  ''  ''  ''  'P0702' ''  ''  ''
    '1F'    '2013'  'n' '7/23/2013' ''  ''  ''  ''  ''  ''  ''  ''  ''  'P0702' ''  ''  ''  ''
    '1F'    '2013'  'm' '10/19/2013'    ''  ''  ''  ''  ''  ''  'P0882' 'P0702' ''  ''  ''  ''  ''  ''

例如,输出将类似于

开始日期:06/21/2013 结束日期:12/31/2013

         Count
P0702    20
P0882    15

这里的 20 和 15 只是输出的示例(不是真实值)。在这种情况下,任何帮助将不胜感激。谢谢

4

1 回答 1

2

以下代码将:

  • 在您的表格中找到所有唯一代码
  • dateStart找到和之间的线dateStop
  • 计算每个代码的出现次数。

%% // INPUTS
dstart = '06/21/2013' ; %// starting date
dstop  = '12/31/2013' ; %// end date
%// code2count = {'P0702','P0882'} ; %// done below by looking up the table

%% // find unique codes
idxCode = ~cellfun(@isempty , C ) ;
idxCode(:,1:5) = false ; %// will not consider 5 first columns
code2count = unique(C(idxCode)) ;

%% // Extract dates
dateFormat = 'MM/DD/YYYY' ;
dateStart = datenum(dstart, dateFormat) ;
dateStop  = datenum(dstop , dateFormat) ;
dateCol = cellfun(@(d) datenum(d,dateFormat) , C(:,4) ) ;

%// this contains the indices of the matching dates
idxDateOk = (dateCol >= dateStart) & (dateCol <= dateStop ) ; 

%% // now count
nCodes = numel(code2count) ;
counts = zeros(nCodes,1) ;
fprintf('%-10s   Counts\n','Code')
for k=1:nCodes
    counts(k) = sum(sum( strcmp( code2count(k) , C(idxDateOk,:) ) ) ) ;
    fprintf( '%-10s   %d\n',code2count{k},counts(k) ) ;          %// display results
end

这输出:

Code         Counts
P0702        3
P0882        0
P0883        0
于 2015-09-10T18:35:04.693 回答