X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Fregression.c;h=66a5abaf7c8aa7011d071bc5a9837c06904451e5;hb=912833f9331784d692ade66c76bffb5497b890e0;hp=52009e29683a72e4722df66674aead46fd1e2562;hpb=0df9cdd3df66caf4353128feff3008289cda8115;p=pspp diff --git a/src/language/stats/regression.c b/src/language/stats/regression.c index 52009e2968..66a5abaf7c 100644 --- a/src/language/stats/regression.c +++ b/src/language/stats/regression.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 2005, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. + Copyright (C) 2005, 2009, 2010, 2011, 2012, 2013, 2014, 2016 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -225,8 +225,7 @@ cmd_regression (struct lexer *lexer, struct dataset *ds) if (lex_match_id (lexer, "DEPENDENT")) { - if (!lex_force_match (lexer, T_EQUALS)) - goto error; + lex_match (lexer, T_EQUALS); free (regression.dep_vars); regression.n_dep_vars = 0; @@ -248,6 +247,7 @@ cmd_regression (struct lexer *lexer, struct dataset *ds) } else if (lex_match_id (lexer, "STATISTICS")) { + unsigned long statistics = 0; lex_match (lexer, T_EQUALS); while (lex_token (lexer) != T_ENDCMD @@ -255,33 +255,34 @@ cmd_regression (struct lexer *lexer, struct dataset *ds) { if (lex_match (lexer, T_ALL)) { - regression.stats = ~0; + statistics = ~0; } else if (lex_match_id (lexer, "DEFAULTS")) { - regression.stats |= STATS_DEFAULT; + statistics |= STATS_DEFAULT; } else if (lex_match_id (lexer, "R")) { - regression.stats |= STATS_R; + statistics |= STATS_R; } else if (lex_match_id (lexer, "COEFF")) { - regression.stats |= STATS_COEFF; + statistics |= STATS_COEFF; } else if (lex_match_id (lexer, "ANOVA")) { - regression.stats |= STATS_ANOVA; + statistics |= STATS_ANOVA; } else if (lex_match_id (lexer, "BCOV")) { - regression.stats |= STATS_BCOV; + statistics |= STATS_BCOV; } else if (lex_match_id (lexer, "CI")) { - regression.stats |= STATS_CI; + statistics |= STATS_CI; - if (lex_match (lexer, T_LPAREN)) + if (lex_match (lexer, T_LPAREN) && + lex_force_num (lexer)) { regression.ci = lex_number (lexer) / 100.0; lex_get (lexer); @@ -294,6 +295,10 @@ cmd_regression (struct lexer *lexer, struct dataset *ds) goto error; } } + + if (statistics) + regression.stats = statistics; + } else if (lex_match_id (lexer, "SAVE")) { @@ -344,8 +349,7 @@ cmd_regression (struct lexer *lexer, struct dataset *ds) if (regression.resid) { - workspace.extras ++; - workspace.res_idx = 0; + workspace.res_idx = workspace.extras ++; workspace.residvars = xcalloc (regression.n_dep_vars, sizeof (*workspace.residvars)); for (i = 0; i < regression.n_dep_vars; ++i) @@ -357,8 +361,7 @@ cmd_regression (struct lexer *lexer, struct dataset *ds) if (regression.pred) { - workspace.extras ++; - workspace.pred_idx = 1; + workspace.pred_idx = workspace.extras ++; workspace.predvars = xcalloc (regression.n_dep_vars, sizeof (*workspace.predvars)); for (i = 0; i < regression.n_dep_vars; ++i) @@ -372,6 +375,10 @@ cmd_regression (struct lexer *lexer, struct dataset *ds) msg (SW, _("REGRESSION with SAVE ignores TEMPORARY. " "Temporary transformations will be made permanent.")); + if (dict_get_filter (dict)) + msg (SW, _("REGRESSION with SAVE ignores FILTER. " + "All cases will be processed.")); + workspace.writer = autopaging_writer_create (proto); caseproto_unref (proto); } @@ -701,7 +708,7 @@ run_regression (const struct regression *cmd, for (; (c = casereader_read (r)) != NULL; case_unref (c)) { - struct ccase *outc = case_clone (c); + struct ccase *outc = case_create (casewriter_get_proto (ws->writer)); for (k = 0; k < cmd->n_dep_vars; k++) { const struct variable **vars = xnmalloc (cmd->n_vars, sizeof (*vars));