case: Introduce new functions for numbers and substrings in cases.
[pspp] / src / language / stats / glm.c
index d7b9b0f084e2de4fc04a5a75d6cd1fbe42e01e60..2766279f2ed9fbcaad9c80531a7c0752fb63ccde 100644 (file)
@@ -262,19 +262,13 @@ cmd_glm (struct lexer *lexer, struct dataset *ds)
              goto error;
            }
 
-         if (! lex_force_int (lexer))
+         if (!lex_force_int_range (lexer, "SSTYPE", 1, 3))
            {
              lex_error (lexer, NULL);
              goto error;
            }
 
          glm.ss_type = lex_integer (lexer);
-         if (1 > glm.ss_type  ||  3 < glm.ss_type)
-           {
-             msg (ME, _("Only types 1, 2 & 3 sums of squares are currently implemented"));
-             goto error;
-           }
-
          lex_get (lexer);
 
          if (! lex_force_match (lexer, T_RPAREN))
@@ -624,8 +618,7 @@ run_glm (struct glm_spec *cmd, struct casereader *input,
       double weight = dict_get_case_weight (dict, c, &warn_bad_weight);
 
       for (v = 0; v < cmd->n_dep_vars; ++v)
-       moments_pass_one (ws.totals, case_data (c, cmd->dep_vars[v])->f,
-                         weight);
+       moments_pass_one (ws.totals, case_num (c, cmd->dep_vars[v]), weight);
 
       covariance_accumulate_pass1 (cov, c);
     }
@@ -642,8 +635,7 @@ run_glm (struct glm_spec *cmd, struct casereader *input,
       double weight = dict_get_case_weight (dict, c, &warn_bad_weight);
 
       for (v = 0; v < cmd->n_dep_vars; ++v)
-       moments_pass_two (ws.totals, case_data (c, cmd->dep_vars[v])->f,
-                         weight);
+       moments_pass_two (ws.totals, case_num (c, cmd->dep_vars[v]), weight);
 
       covariance_accumulate_pass2 (cov, c);
     }
@@ -860,8 +852,8 @@ parse_nested_variable (struct lexer *lexer, struct glm_spec *glm)
        return false;
     }
 
-  lex_error (lexer, "Nested variables are not yet implemented"); return false;
-  return true;
+  lex_error (lexer, "Nested variables are not yet implemented");
+  return false;
 }
 
 /* A design term is an interaction OR a nested variable */
@@ -872,7 +864,7 @@ parse_design_term (struct lexer *lexer, struct glm_spec *glm)
   if (parse_design_interaction (lexer, glm->dict, &iact))
     {
       /* Interaction parsing successful.  Add to list of interactions */
-      glm->interactions = xrealloc (glm->interactions, sizeof *glm->interactions * ++glm->n_interactions);
+      glm->interactions = xrealloc (glm->interactions, sizeof (*glm->interactions) * ++glm->n_interactions);
       glm->interactions[glm->n_interactions - 1] = iact;
       return true;
     }
@@ -902,4 +894,3 @@ parse_design_spec (struct lexer *lexer, struct glm_spec *glm)
 
   return parse_design_spec (lexer, glm);
 }
-