Delete tables and plots - Remove Tables With Sample Size Lower Than Specified Value

From Q
Jump to: navigation, search

This QScript deletes any tables from your project that have a sample size smaller than a specified value.

Technical details

This QScript:

  • Asks you to specify a minimum sample size to keep.
  • Asks you to select which tables you would like to check.
  • Deletes any tables from your selection where the largest value of Base n in the cells of the table is less than the minimum value.

How to apply this QScript

  • Start typing the name of the QScript into the Search features and data box in the top right of the Q window.
  • Click on the QScript when it appears in the QScripts and Rules section of the search results.

OR

  • Select Automate > Browse Online Library.
  • Select this QScript from the list.

Customizing the QScript

This QScript is written in JavaScript and can be customized by copying and modifying the JavaScript.

Customizing QScripts in Q4.11 and more recent versions

  • Start typing the name of the QScript into the Search features and data box in the top right of the Q window.
  • Hover your mouse over the QScript when it appears in the QScripts and Rules section of the search results.
  • Press Edit a Copy (bottom-left corner of the preview).
  • Modify the JavaScript (see QScripts for more detail on this).
  • Either:
    • Run the QScript, by pressing the blue triangle button.
    • Save the QScript and run it at a later time, using Automate > Run QScript (Macro) from File.

Customizing QScripts in older versions

  • Copy the JavaScript shown on this page.
  • Create a new text file, giving it a file extension of .QScript. See here for more information about how to do this.
  • Modify the JavaScript (see QScripts for more detail on this).
  • Run the file using Automate > Run QScript (Macro) from File.

JavaScript

// Whenever a table's sample size is so small it's not worth looking at, delete the table.
// The sample size used for the comparison is the largest value of Base n on the table.

includeWeb('JavaScript Utilities');
includeWeb('QScript Table Functions');
includeWeb('QScript Selection Functions');
 
var min_size = prompt("Please enter the minimum sample size that you wish to view. Tables with a smaller sample size will be removed.", 10);
 
var items = selectManyTablesWithGroupNames("Please choose which tables you would like to check. Tables with a sample size less than " +min_size+" will be removed." , project.report).tables;

var deleted_table_names = [];

for (var i = 0; i < items.length; i++)
    if (items[i].type == 'Table') {
        var output;
        try {
            output = items[i].calculateOutput();
        } catch (e) {
            items[i].deleteItem(); // Table is empty and should be removed
            continue;
        }
        // Ignore tables showing Text questions
        if (output.availableStatistics.indexOf('Text') == -1) {
            if (maxWithReplacedNaN(output.get('Base n'), 0) < min_size) {
                deleted_table_names.push(items[i].name);
                items[i].deleteItem();
            }
        }            
    }

if (deleted_table_names.length > 0) {
    log("The following tables have been removed: ");
    log(deleted_table_names.join('\r\n'));
} else {
    log("No tables were found to have a sample size less than " + min_size +".");
}


// returns the maximum value of an array of any size; where NaN is replaced with another value
// if any of the elements of the array are also arrays then this function applies itself
// to find the maximum of the subarray
function maxWithReplacedNaN(x, replace_NaN_with) {
    var max_value = Number.NEGATIVE_INFINITY;
    var n = x.length;
    for (var i = 0; i < n; i++){
        var value = x[i];
        if (isArray(value))
            value = maxWithReplacedNaN(value, replace_NaN_with);
        if (isNaN(value))
            value = replace_NaN_with;
        if (max_value < value)
            max_value = value;
    }
    return max_value;
}


See also