1function summarize(X,Time,Spec,vintage)
2%summarize Display the detail table for data entering the DFM
3%
4% Description:
5%   Display the detail table for the nowcast, decomposing nowcast changes
6%   into news and impacts for released data series.
7
8% Print results to command window
9fprintf('\n\n\n');
10fprintf('Table 2: Data Summary \n');
11
12[T,N] = size(X);
13%fprintf('Vintage: %s \n',datestr(datenum(vintage,'yyyy-mm-dd'),'mmmm dd, yyyy'));
14fprintf('N = %4d data series \n',N);
15fprintf('T = %4d observations from %10s to %10s \n',T,datestr(Time(1),'yyyy-mm-dd'),datestr(Time(end),'yyyy-mm-dd'));
16
17
18fprintf('%30s | %17s    %12s    %10s    %8s    %8s    %8s    %8s \n',...
19        'Data Series','Observations','Units','Frequency','Mean','Std. Dev.','Min','Max');
20fprintf([repmat('-',1,130) '\n']);
21
22for i = 1:N
23
24    % time indexes for which there are observed values for series i
25    t_obs = ~isnan(X(:,i));
26
27    data_series = Spec.SeriesName{i};
28    if length(data_series) > 30
29        data_series = [data_series(1:27) '...'];
30    end
31    series_id   = Spec.SeriesID{i};
32    if length(series_id) > 28
33        series_id = [series_id(1:25) '...'];
34    end
35    series_id   = ['[' series_id ']'];
36    num_obs     = length(X(t_obs,i));
37    freq        = Spec.Frequency{i};
38    if strcmp('m',freq)
39        format_date = 'mmm yyyy';
40        frequency   = 'Monthly';
41    elseif strcmp('q',freq)
42        format_date = 'QQ yyyy';
43        frequency   = 'Quarterly';
44    end
45    units       = Spec.Units{i};
46    transform   = Spec.Transformation{i};
47    % display transformed units
48    if strfind(units,'Index')
49        units_transformed = 'Index';
50    elseif strcmp('chg',transform)
51        if strfind(units,'%')
52            units_transformed = 'Ppt. change';
53        else
54            units_transformed = 'Level change';
55        end
56    elseif strcmp('pch',transform) && strcmp('m',freq)
57        units_transformed = 'MoM%';
58    elseif strcmp('pca',transform) && strcmp('q',freq)
59        units_transformed = 'QoQ% AR';
60    else
61        if length([units ' (' transform ')']) > 12
62            units_transformed = [units(1:6) ' (' transform ')'];
63        else
64            units_transformed = [units ' (' transform ')'];
65        end
66    end
67    t_obs_start = find(t_obs,1,'first');
68    t_obs_end   = find(t_obs,1,'last');
69    obs_date_start  = datestr(Time(t_obs_start),format_date);
70    obs_date_end    = datestr(Time(t_obs_end  ),format_date);
71    date_range  = [obs_date_start '-' obs_date_end];
72    y           = X(t_obs,i);
73    d           = Time(t_obs);
74    mean_series = mean(y,'omitnan');
75    stdv_series = std(y,'omitnan');
76    [min_series,t_min] = min(y);
77    [max_series,t_max] = max(y);
78    min_date = datestr(d(t_min),format_date);
79    max_date = datestr(d(t_max),format_date);
80    fprintf('%30s | %17d    %12s    %10s    %8.1f    %8.1f    %8.1f    %8.1f \n',...
81            data_series,num_obs,units_transformed,frequency,mean_series,stdv_series,min_series,max_series);
82    fprintf('%30s | %17s    %12s    %10s    %8s    %8s    %8s    %8s \n',...
83            series_id,date_range,'','','','',min_date,max_date);
84
85end
86
87fprintf('\n\n\n');
88
89end
90
91