diff --git a/matlab/dynare_estimation.m b/matlab/dynare_estimation.m index 9b83dff71..4c8369a1b 100644 --- a/matlab/dynare_estimation.m +++ b/matlab/dynare_estimation.m @@ -55,6 +55,8 @@ options_ = set_default_option(options_,'kalman_algo',1); options_ = set_default_option(options_,'kalman_tol',10^(-12)); options_ = set_default_option(options_,'posterior_mode_estimation',1); options_ = set_default_option(options_,'MaxNumberOfBytes',1e6); +options_ = set_default_option(options_,'xls_sheet',''); +options_ = set_default_option(options_,'xls_range',''); %% Add something to the parser ++> M_.dname = M_.fname; % The user should be able to choose another name @@ -175,17 +177,11 @@ k = find(isnan(bayestopt_.jscale)); bayestopt_.jscale(k) = options_.mh_jscale; %% Read and demean data -if exist(options_.datafile) - instr = options_.datafile; -else - instr = ['load ' options_.datafile]; -end -eval(instr); -rawdata = []; +rawdata = read_variables(options_.datafile,options_.varobs,[],options_.xls_sheet,options_.xls_range); + k = []; k1 = []; for i=1:n_varobs - rawdata = [rawdata eval(deblank(options_.varobs(i,:)))]; k = [k strmatch(deblank(options_.varobs(i,:)),M_.endo_names(dr.order_var,:), ... 'exact')]; k1 = [k1 strmatch(deblank(options_.varobs(i,:)),M_.endo_names, 'exact')]; diff --git a/matlab/dynare_m.exe b/matlab/dynare_m.exe index bd8fff062..7f669242a 100755 Binary files a/matlab/dynare_m.exe and b/matlab/dynare_m.exe differ diff --git a/matlab/read_variables.m b/matlab/read_variables.m new file mode 100644 index 000000000..755219b58 --- /dev/null +++ b/matlab/read_variables.m @@ -0,0 +1,41 @@ +% Copyright (C) 2005 Michel Juillard +% +% all local variables have complicated names in order to avoid name +% conflicts with possible user variable names + +function dyn_data_01=read_variables(file_name_01,var_names_01,dyn_data_01,xls_sheet,xls_range) + + dyn_size_01 = size(dyn_data_01,1); + var_size_01 = size(var_names_01,1); + if exist(file_name_01) + dyn_instr_01 = file_name_01; + eval(dyn_instr_01); + for dyn_i_01=1:var_size_01 + dyn_tmp_01 = eval(var_names_01(dyn_i_01,:)); + if length(dyn_tmp_01) > dyn_size_01 & dyn_size_01 > 0 + error('data size is too large') + end + dyn_data_01(:,dyn_i_01) = dyn_tmp_01; + end + elseif exist([file_name_01 '.mat']) + s = load(file_name_01); + for dyn_i_01=1:var_size_01 + dyn_tmp_01 = s.(var_names_01(dyn_i_01,:)); + if length(dyn_tmp_01) > dyn_size_01 & dyn_size_01 > 0 + error('data size is too large') + end + dyn_data_01(:,dyn_i_01) = dyn_tmp_01; + end + elseif exist([file_name_01 '.xls']) + [num,txt,raw] = xlsread(file_name_01,xls_sheet,xls_range); + for dyn_i_01=1:var_size_01 + iv = strmatch(var_names_01(dyn_i_01,:),raw(1,:),'exact'); + dyn_tmp_01 = [raw{2:end,iv}]'; + if length(dyn_tmp_01) > dyn_size_01 & dyn_size_01 > 0 + error('data size is too large') + end + dyn_data_01(:,dyn_i_01) = dyn_tmp_01; + end + + end +