DELETE VARIABLES: Fix crash with FILTER.
[pspp] / src / language / stats / regression.c
index 4795ee844cbce2550d14f2056164992a52248575..1ec00c9f33806f9fc9e6db6605423fa4411928ef 100644 (file)
@@ -270,6 +270,7 @@ cmd_regression (struct lexer *lexer, struct dataset *ds)
   int k;
   struct regression regression;
   const struct dictionary *dict = dataset_dict (ds);
+  bool save;
 
   memset (&regression, 0, sizeof (struct regression));
 
@@ -388,19 +389,28 @@ cmd_regression (struct lexer *lexer, struct dataset *ds)
 
   regression.models = xcalloc (regression.n_dep_vars, sizeof *regression.models);
 
+  save = regression.pred || regression.resid;
+  if (save)
+    {
+      if (proc_make_temporary_transformations_permanent (ds))
+        msg (SW, _("REGRESSION with SAVE ignores TEMPORARY.  "
+                   "Temporary transformations will be made permanent."));
+    }
+
   {
     struct casegrouper *grouper;
     struct casereader *group;
     bool ok;
     
-    grouper = casegrouper_create_splits (proc_open (ds), dict);
+    grouper = casegrouper_create_splits (proc_open_filtering (ds, !save),
+                                         dict);
     while (casegrouper_get_next_group (grouper, &group))
       run_regression (&regression, group);
     ok = casegrouper_destroy (grouper);
     ok = proc_commit (ds) && ok;
   }
 
-  if (regression.pred || regression.resid )
+  if (save)
     {
       subcommand_save (&regression);
     }
@@ -414,9 +424,12 @@ cmd_regression (struct lexer *lexer, struct dataset *ds)
   return CMD_SUCCESS;
   
  error:
+  if (regression.models)
+   {
   for (k = 0; k < regression.n_dep_vars; k++)
     linreg_unref (regression.models[k]);
   free (regression.models);
+   }
   free (regression.vars);
   free (regression.dep_vars);
   return CMD_FAILURE;