File: load_m_file_data.m

package info (click to toggle)
dynare 4.4.3-3
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 41,356 kB
  • ctags: 15,842
  • sloc: cpp: 77,029; ansic: 29,056; pascal: 13,241; sh: 4,811; objc: 3,061; yacc: 3,013; makefile: 1,479; lex: 1,258; python: 162; lisp: 54; xml: 8
file content (150 lines) | stat: -rw-r--r-- 4,572 bytes parent folder | download | duplicates (2)
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
function [freq,init,data,varlist,tex] = load_m_file_data(file)

% Loads data in a matlab/octave script.
%
% INPUTS 
%  o file         string, name of the matlab/octave script (with path)
%
% OUTPUTS 
%  o freq        integer scalar equal to 1, 4, 12 or 52 (for annual, quaterly, monthly or weekly frequencies).
%  o init        dates object, initial date in the dataset.
%  o data        matrix of doubles, the data.
%  o varlist     cell of strings, names of the variables.
%
% REMARKS 
% The frequency and initial date can be specified with variables FREQ__ and INIT__ in the matlab/octave script. FREQ__ must 
% be a scalar integer and INIT__ a string like '1938M11', '1945Q3', '1973W3' or '2009A'. If these variables are not specified 
% default values for freq and init are 1 and dates(1,1).

% Copyright (C) 2012-2013 Dynare Team
%
% This file is part of Dynare.
%
% Dynare is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.
%
% Dynare is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with Dynare.  If not, see <http://www.gnu.org/licenses/>.

if isoctave
    run(file);
else
    [basename, ext] = strtok(file,'.');
    run(basename);
end

if exist('INIT__','var')
    if isdate(INIT__)
        init = dates(INIT__);
        clear('INIT__')
    else
        error('load_m_file_data: INIT__ cannot be interpreted as a date.')
    end
else
    init = dates(1,1); % Default initial date is year one.
end

if exist('FREQ__','var')
    freq = FREQ__;
    clear('FREQ__');
else
    freq = init.freq;
end

if ~isequal(freq,init.freq)
    error('load_m_file_data: INIT__ and FREQ__ are not consistent!')
end

if exist('NAMES__','var')
    varlist0 = NAMES__;
    clear('NAMES__');
else
    varlist0 = [];
    list_of_variables = [];
end

if exist('TEX__','var')
    tex = TEX__;
    clear('TEX__');
else
    tex = [];
end


if isempty(varlist0)
    list_of_variables = whos();
end

data = [];
varlist = {};

if isempty(varlist0)
    for i=1:length(list_of_variables)
        if isequal(list_of_variables(i).name,'freq') || isequal(list_of_variables(i).name,'time') || isequal(list_of_variables(i).name,'data') ...
                || isequal(list_of_variables(i).name,'varlist') ...
                || isequal(list_of_variables(i).name,'varlist0') ...
                || isequal(list_of_variables(i).name,'list_of_variables') ...
                || isequal(list_of_variables(i).name,'tex') ...                
            continue
        end
        if list_of_variables(i).global || list_of_variables(i).persistent
            continue
        end
        if list_of_variables(i).complex || ~strcmp(list_of_variables(i).class,'double')
            continue
        end
        try
            eval(['data = [data, ' list_of_variables(i).name '];'])
            eval(['varlist = {varlist{:}, ''' list_of_variables(i).name '''};']) 
        catch
            error(['load_m_file:: All the vectors (variables) in ' inputname(1) ' must have the same number of rows (observations)!'])
        end
    end
else
    for i=1:length(varlist0)
       eval(['data = [data, ' varlist0{i} '];']) 
    end
    varlist = varlist0;
end

%@test:1
%$ % Create a data m-file
%$ fid = fopen('data_m_file.m','w');
%$ fprintf(fid,'FREQ__ = 4;');
%$ fprintf(fid,'INIT__ = ''1938Q4'';');
%$ fprintf(fid,'NAMES__ = {''azert'';''yuiop''};');
%$ fprintf(fid,'TEX__ = {''azert'';''yuiop''};');
%$ fprintf(fid,'azert = [1; 2; 3; 4; 5];');
%$ fprintf(fid,'yuiop = [2; 3; 4; 5; 6];');
%$ fclose(fid);
%$
%$ % Try to read the data m-file
%$ try
%$     datafile = 'data_m_file';
%$     [freq,init,data,varlist,tex] = load_m_file_data(datafile);
%$     t(1) = 1;
%$ catch exception
%$     t(1) = 0;
%$     T = all(t);
%$     LOG = getReport(exception,'extended');
%$     return
%$ end
%$
%$ % Check the results.
%$ t(2) = dyn_assert(freq,4);
%$ t(3) = dyn_assert(isa(init,'dates'),1);
%$ t(4) = dyn_assert(init.freq,4);
%$ t(5) = dyn_assert(init.time,[1938 4]);
%$ t(6) = dyn_assert(varlist,{'azert';'yuiop'});
%$ t(7) = dyn_assert(tex,{'azert';'yuiop'});
%$ t(8) = dyn_assert(data(:,1),[1;2;3;4;5]);
%$ t(9) = dyn_assert(data(:,2),[2;3;4;5;6]);
%$ T = all(t);
%@eof:1