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