pivot-table: Change the default format to omit empty rows and columns.
[pspp] / src / language / stats / examine.c
index 20fb46f3be09a13216009496f986653d882aae72..409b9a6dd079cde8675b401682e369152193d00b 100644 (file)
@@ -71,7 +71,7 @@ static void
 append_value_name (const struct variable *var, const union value *val, struct string *str)
 {
   var_append_value_name (var, val, str);
-  if ( var_is_value_missing (var, val, MV_ANY))
+  if (var_is_value_missing (var, val, MV_ANY))
     ds_put_cstr (str, _(" (missing)"));
 }
 
@@ -135,7 +135,7 @@ struct examine
   size_t n_percentiles;
 
   unsigned int plot;
-  int sl_power;
+  float sl_power;
 
   enum bp_mode boxplot_mode;
 
@@ -235,10 +235,10 @@ show_boxplot_grouped (const struct examine *cmd, int iact_idx)
           const struct exploratory_stats *es =
             categoricals_get_user_data_by_category_real (cmd->cats, iact_idx, grp);
 
-          if ( y_min > es[v].minimum)
+          if (y_min > es[v].minimum)
             y_min = es[v].minimum;
 
-          if ( y_max < es[v].maximum)
+          if (y_max < es[v].maximum)
             y_max = es[v].maximum;
         }
 
@@ -310,14 +310,14 @@ show_boxplot_variabled (const struct examine *cmd, int iact_idx)
           const struct exploratory_stats *es =
             categoricals_get_user_data_by_category_real (cmd->cats, iact_idx, grp);
 
-          if ( y_min > es[v].minimum)
+          if (y_min > es[v].minimum)
             y_min = es[v].minimum;
 
-          if ( y_max < es[v].maximum)
+          if (y_max < es[v].maximum)
             y_max = es[v].maximum;
         }
 
-      if ( iact->n_vars == 0)
+      if (iact->n_vars == 0)
         ds_put_format (&title, _("Boxplot"));
       else
         {
@@ -389,7 +389,7 @@ show_npplot (const struct examine *cmd, int iact_idx)
           ds_init_cstr (&label,
                         var_to_string (cmd->dep_vars[v]));
 
-          if ( iact->n_vars > 0)
+          if (iact->n_vars > 0)
             {
               ds_put_cstr (&label, " (");
               for (ivar_idx = 0; ivar_idx < iact->n_vars; ++ivar_idx)
@@ -514,7 +514,7 @@ show_histogram (const struct examine *cmd, int iact_idx)
           ds_init_cstr (&label,
                         var_to_string (cmd->dep_vars[v]));
 
-          if ( iact->n_vars > 0)
+          if (iact->n_vars > 0)
             {
               ds_put_cstr (&label, " (");
               for (ivar_idx = 0; ivar_idx < iact->n_vars; ++ivar_idx)
@@ -535,7 +535,7 @@ show_histogram (const struct examine *cmd, int iact_idx)
           moments_calculate (es[v].mom, &n, &mean, &var, NULL, NULL);
 
           chart_item_submit
-            ( histogram_chart_create (es[v].histogram->gsl_hist,
+            (histogram_chart_create (es[v].histogram->gsl_hist,
                                       ds_cstr (&label), n, mean,
                                       sqrt (var), false));
 
@@ -562,7 +562,7 @@ create_interaction_dimensions (struct pivot_table *table,
                                const struct interaction *iact,
                                struct pivot_footnote *missing_footnote)
 {
-  for (size_t i = iact->n_vars; i-- > 0; )
+  for (size_t i = iact->n_vars; i-- > 0;)
     {
       const struct variable *var = iact->vars[i];
       struct pivot_dimension *d = pivot_dimension_create__ (
@@ -589,7 +589,6 @@ static void
 percentiles_report (const struct examine *cmd, int iact_idx)
 {
   struct pivot_table *table = pivot_table_create (N_("Percentiles"));
-  table->omit_empty = true;
 
   struct pivot_dimension *percentiles = pivot_dimension_create (
     table, PIVOT_AXIS_COLUMN, N_("Percentiles"));
@@ -667,7 +666,6 @@ static void
 normality_report (const struct examine *cmd, int iact_idx)
 {
   struct pivot_table *table = pivot_table_create (N_("Tests of Normality"));
-  table->omit_empty = true;
 
   struct pivot_dimension *test =
     pivot_dimension_create (table, PIVOT_AXIS_COLUMN, N_("Shapiro-Wilk"),
@@ -733,7 +731,6 @@ static void
 descriptives_report (const struct examine *cmd, int iact_idx)
 {
   struct pivot_table *table = pivot_table_create (N_("Descriptives"));
-  table->omit_empty = true;
 
   pivot_dimension_create (table, PIVOT_AXIS_COLUMN, N_("Aspect"),
                           N_("Statistic"), N_("Std. Error"));
@@ -830,7 +827,6 @@ static void
 extremes_report (const struct examine *cmd, int iact_idx)
 {
   struct pivot_table *table = pivot_table_create (N_("Extreme Values"));
-  table->omit_empty = true;
 
   struct pivot_dimension *statistics = pivot_dimension_create (
     table, PIVOT_AXIS_COLUMN, N_("Statistics"));
@@ -845,7 +841,9 @@ extremes_report (const struct examine *cmd, int iact_idx)
   for (size_t i = 0; i < cmd->disp_extremes; i++)
     pivot_category_create_leaf (order->root, pivot_value_new_integer (i + 1));
 
-  pivot_dimension_create (table, PIVOT_AXIS_ROW, N_("Extreme"),
+  pivot_dimension_create (table, PIVOT_AXIS_ROW,
+                         /* TRANSLATORS: This is a noun, not an adjective.  */
+                         N_("Extreme"),
                           N_("Highest"), N_("Lowest"));
 
   const struct interaction *iact = cmd->iacts[iact_idx];
@@ -917,7 +915,6 @@ summary_report (const struct examine *cmd, int iact_idx)
 {
   struct pivot_table *table = pivot_table_create (
     N_("Case Processing Summary"));
-  table->omit_empty = true;
   pivot_table_set_weight_var (table, dict_get_weight (cmd->dict));
 
   pivot_dimension_create (table, PIVOT_AXIS_COLUMN, N_("Statistics"),
@@ -994,7 +991,7 @@ parse_interaction (struct lexer *lexer, struct examine *ex)
   const struct variable *v = NULL;
   struct interaction *iact = NULL;
 
-  if ( lex_match_variable (lexer, ex->dict, &v))
+  if (lex_match_variable (lexer, ex->dict, &v))
     {
       iact = interaction_create (v);
 
@@ -1318,6 +1315,12 @@ cleanup_exploratory_stats (struct examine *cmd)
                  stat->destroy (stat);
                }
 
+              if (es[v].shapiro_wilk)
+                {
+                  stat = &es[v].shapiro_wilk->parent.parent;
+                  stat->destroy (stat);
+                }
+
              os = &es[v].trimmed_mean->parent;
              stat = &os->parent;
              stat->destroy (stat);
@@ -1483,7 +1486,7 @@ cmd_examine (struct lexer *lexer, struct dataset *ds)
   lex_match (lexer, T_SLASH);
   if (lex_match_id  (lexer, "VARIABLES"))
     {
-      if (! lex_force_match (lexer, T_EQUALS) )
+      if (! lex_force_match (lexer, T_EQUALS))
         goto error;
     }
 
@@ -1573,7 +1576,7 @@ cmd_examine (struct lexer *lexer, struct dataset *ds)
                 {
                   double p = lex_number (lexer);
 
-                  if ( p <= 0 || p >= 100.0)
+                  if (p <= 0 || p >= 100.0)
                     {
                       lex_error (lexer,
                                  _("Percentiles must lie in the range (0, 100)"));
@@ -1717,9 +1720,9 @@ cmd_examine (struct lexer *lexer, struct dataset *ds)
                 {
                   examine.plot |= PLOT_SPREADLEVEL;
                  examine.sl_power = 0;
-                 if (lex_match (lexer, T_LPAREN) && lex_force_int (lexer))
+                 if (lex_match (lexer, T_LPAREN) && lex_force_num (lexer))
                    {
-                      examine.sl_power = lex_integer (lexer);
+                      examine.sl_power = lex_number (lexer);
 
                       lex_get (lexer);
                       if (! lex_force_match (lexer, T_RPAREN))
@@ -1744,7 +1747,7 @@ cmd_examine (struct lexer *lexer, struct dataset *ds)
         }
       else if (lex_match_id (lexer, "CINTERVAL"))
         {
-          if ( !lex_force_num (lexer))
+          if (!lex_force_num (lexer))
             goto error;
 
           examine.conf = lex_number (lexer);
@@ -1764,15 +1767,15 @@ cmd_examine (struct lexer *lexer, struct dataset *ds)
     }
 
 
-  if ( totals_seen && nototals_seen)
+  if (totals_seen && nototals_seen)
     {
-      msg (SE, _("%s and %s are mutually exclusive"),"TOTAL","NOTOTAL");
+      msg (SE, _("%s and %s are mutually exclusive"), "TOTAL", "NOTOTAL");
       goto error;
     }
 
   /* If totals have been requested or if there are no factors
      in this analysis, then the totals need to be included. */
-  if ( !nototals_seen || examine.n_iacts == 1)
+  if (!nototals_seen || examine.n_iacts == 1)
     {
       examine.iacts = &iacts_mem[0];
     }
@@ -1784,7 +1787,7 @@ cmd_examine (struct lexer *lexer, struct dataset *ds)
     }
 
 
-  if ( examine.id_var )
+  if (examine.id_var)
     {
       examine.id_idx = var_get_case_index (examine.id_var);
       examine.id_width = var_get_width (examine.id_var);