diff --git a/matlab/global_initialization.m b/matlab/global_initialization.m index 364edc3023ee2f6b9af5b61497d047f8c38e39ae..1122b99bb9796c425eb99462ae9462d936f2645a 100644 --- a/matlab/global_initialization.m +++ b/matlab/global_initialization.m @@ -349,6 +349,7 @@ estimation_info.structural_innovation_corr_options_index = {}; estimation_info.structural_innovation_corr.range_index = {}; options_.initial_period = dates(1,1); options_.dataset.file = []; +options_.dataset.series = []; options_.dataset.firstobs = dates(); options_.dataset.lastobs = dates(); options_.dataset.nobs = NaN; diff --git a/matlab/utilities/dataset/makedataset.m b/matlab/utilities/dataset/makedataset.m index 52064d441b3f5e840c963bf0dcb8bb83fcf41b07..08b91229c016a4954c8102022712acc379866458 100644 --- a/matlab/utilities/dataset/makedataset.m +++ b/matlab/utilities/dataset/makedataset.m @@ -23,18 +23,29 @@ function [DynareDataset, DatasetInfo] = makedataset(DynareOptions) % % See also dynare_estimation_init -if isempty(DynareOptions.datafile) && isempty(DynareOptions.dataset.file) +if isempty(DynareOptions.datafile) && isempty(DynareOptions.dataset.file) && isempty(DynareOptions.dataset.series) if gsa_flag DynareDataset = dseries(); return else - error('datafile option is missing') + error('makedataset: datafile option is missing!') end end if isempty(DynareOptions.datafile) && ~isempty(DynareOptions.dataset.file) datafile = DynareOptions.dataset.file; newdatainterface = 1; +elseif isempty(DynareOptions.datafile) && ~isempty(DynareOptions.dataset.series) + try + dseriesobjectforuserdataset = evalin('base', DynareOptions.dataset.series); + catch + error(sprintf('makedataset: %s is unknown!', DynareOptions.dataset.series)) + end + if ~isdseries(dseriesobjectforuserdataset) + error(sprintf('makedataset: %s has to be a dseries object!', DynareOptions.dataset.series)) + end + datafile = []; + newdatainterface = 1; elseif ~isempty(DynareOptions.datafile) && isempty(DynareOptions.dataset.file) datafile = DynareOptions.datafile; newdatainterface = 0; @@ -45,29 +56,36 @@ else end % Check extension. -allowed_extensions = {'m','mat','csv','xls','xlsx'}; -datafile_extension = get_file_extension(datafile); -if isempty(datafile_extension) - available_extensions = {}; j = 1; - for i=1:length(allowed_extensions) - if exist([datafile '.' allowed_extensions{i}]) - available_extensions(j) = {allowed_extensions{i}}; - j = j+1; +if ~isempty(datafile) + allowed_extensions = {'m','mat','csv','xls','xlsx'}; + datafile_extension = get_file_extension(datafile); + if isempty(datafile_extension) + available_extensions = {}; j = 1; + for i=1:length(allowed_extensions) + if exist([datafile '.' allowed_extensions{i}]) + available_extensions(j) = {allowed_extensions{i}}; + j = j+1; + end end + if isempty(available_extensions) + error(['I can''t find a datafile (with allowed extension)!']) + end + if length(available_extensions)>1 + error(sprintf(['You did not specify an extension for the datafile, but more than one candidate ' ... + 'are available in the designed folder!\nPlease, add an extension to the datafile ' ... + '(m, mat, csv, xls or xlsx are legal extensions).'])); + end + datafile = [datafile '.' available_extensions{1}]; end - if isempty(available_extensions) - error(['I can''t find a datafile (with allowed extension)!']) - end - if length(available_extensions)>1 - error(sprintf(['You did not specify an extension for the datafile, but more than one candidate ' ... - 'are available in the designed folder!\nPlease, add an extension to the datafile ' ... - '(m, mat, csv, xls or xlsx are legal extensions).'])); - end - datafile = [datafile '.' available_extensions{1}]; end % Load the data in a dseries object. -DynareDataset = dseries(datafile); +if ~isempty(datafile) + DynareDataset = dseries(datafile); +else + DynareDataset = dseriesobjectforuserdataset; + clear('dseriesobjectforuserdataset'); +end % Select a subset of the variables. DynareDataset = DynareDataset{DynareOptions.varobs{:}}; diff --git a/preprocessor/ComputingTasks.cc b/preprocessor/ComputingTasks.cc index 25049b0828c4108cf6c7bdff4bf4a5f3e4532dc8..c23908a0d519eea2aecf9f6d09326eb62d529637 100644 --- a/preprocessor/ComputingTasks.cc +++ b/preprocessor/ComputingTasks.cc @@ -1876,9 +1876,17 @@ EstimationDataStatement::checkPass(ModFileStructure &mod_file_struct, WarningCon exit(EXIT_FAILURE); } - if (options_list.string_options.find("file") == options_list.string_options.end()) + if ((options_list.string_options.find("file") == options_list.string_options.end()) && + (options_list.string_options.find("series") == options_list.string_options.end())) { - cerr << "ERROR: The file option must be passed to the data statement." << endl; + cerr << "ERROR: The file or series option must be passed to the data statement." << endl; + exit(EXIT_FAILURE); + } + + if ((options_list.string_options.find("file") != options_list.string_options.end()) && + (options_list.string_options.find("series") != options_list.string_options.end())) + { + cerr << "ERROR: The file and series options cannot be used simultaneously in the data statement." << endl; exit(EXIT_FAILURE); } } diff --git a/preprocessor/DynareBison.yy b/preprocessor/DynareBison.yy index 5f3f336bad6a9b2b6460f81d1919eb766fbfd79d..0c754a4bc06edef53640eedf800aec4df12c14d7 100644 --- a/preprocessor/DynareBison.yy +++ b/preprocessor/DynareBison.yy @@ -90,7 +90,7 @@ class ParsingDriver; %token BVAR_REPLIC BYTECODE ALL_VALUES_REQUIRED %token CALIB_SMOOTHER CHANGE_TYPE CHECK CONDITIONAL_FORECAST CONDITIONAL_FORECAST_PATHS CONF_SIG CONSTANT CONTROLLED_VAREXO CORR COVAR CUTOFF CYCLE_REDUCTION LOGARITHMIC_REDUCTION %token CONSIDER_ALL_ENDOGENOUS CONSIDER_ONLY_OBSERVED -%token DATAFILE FILE DOUBLING DR_CYCLE_REDUCTION_TOL DR_LOGARITHMIC_REDUCTION_TOL DR_LOGARITHMIC_REDUCTION_MAXITER DR_ALGO DROP DSAMPLE DYNASAVE DYNATYPE CALIBRATION DIFFERENTIATE_FORWARD_VARS +%token DATAFILE FILE SERIES DOUBLING DR_CYCLE_REDUCTION_TOL DR_LOGARITHMIC_REDUCTION_TOL DR_LOGARITHMIC_REDUCTION_MAXITER DR_ALGO DROP DSAMPLE DYNASAVE DYNATYPE CALIBRATION DIFFERENTIATE_FORWARD_VARS %token END ENDVAL EQUAL ESTIMATION ESTIMATED_PARAMS ESTIMATED_PARAMS_BOUNDS ESTIMATED_PARAMS_INIT EXTENDED_PATH ENDOGENOUS_PRIOR %token FILENAME FILTER_STEP_AHEAD FILTERED_VARS FIRST_OBS LAST_OBS SET_TIME %token <string_val> FLOAT_NUMBER DATES @@ -1366,6 +1366,7 @@ data_options_list : data_options_list COMMA data_options ; data_options : o_file + | o_series | o_data_first_obs | o_data_last_obs | o_data_nobs @@ -2493,6 +2494,7 @@ o_simul_seed : SIMUL_SEED EQUAL INT_NUMBER { driver.error("'simul_seed' option i o_qz_criterium : QZ_CRITERIUM EQUAL non_negative_number { driver.option_num("qz_criterium", $3); }; o_qz_zero_threshold : QZ_ZERO_THRESHOLD EQUAL non_negative_number { driver.option_num("qz_zero_threshold", $3); }; o_file : FILE EQUAL filename { driver.option_str("file", $3); }; +o_series : SERIES EQUAL symbol { driver.option_str("series", $3); }; o_datafile : DATAFILE EQUAL filename { driver.option_str("datafile", $3); }; o_nobs : NOBS EQUAL vec_int { driver.option_vec_int("nobs", $3); } diff --git a/preprocessor/DynareFlex.ll b/preprocessor/DynareFlex.ll index 6ab6faab0ce5ed866986d466fc4a9141ceb415ae..a552f19973237dd2298e4a5c11e466c30c2b1f17 100644 --- a/preprocessor/DynareFlex.ll +++ b/preprocessor/DynareFlex.ll @@ -604,6 +604,7 @@ DATE -?[0-9]+([YyAa]|[Mm]([1-9]|1[0-2])|[Qq][1-4]|[Ww]([1-9]{1}|[1-4][0-9]|5[0-2 <DYNARE_STATEMENT>simul_replic {return token::SIMUL_REPLIC;} <DYNARE_STATEMENT>xls_sheet {return token::XLS_SHEET;} <DYNARE_STATEMENT>xls_range {return token::XLS_RANGE;} +<DYNARE_STATEMENT>series {return token::SERIES;} <DYNARE_STATEMENT>mh_recover {return token::MH_RECOVER;} <DYNARE_STATEMENT>planner_discount {return token::PLANNER_DISCOUNT;} <DYNARE_STATEMENT>calibration {return token::CALIBRATION;}