Changing how the Index is Calculated
Jump to navigation
Jump to search
Pages with syntax highlighting errors
Q Technical Reference
Q Technical Reference
Q Technical Reference > Setting Up Data > Creating New Variables
Q Technical Reference > Updating and Automation > JavaScript > Table JavaScript and Plot JavaScript > Table JavaScript and Plot JavaScript Examples Library
This example shows how to change how the Index statistic is calculated. It allows you to calculate the Index by dividing by a particular column in the table. If you need to, you can apply this several times to change how the index is computed in a set of different columns.
To use this code in your own project:
- Select Automate > Custom Rule.
- Paste in the code.
- Change columns_to_modify and column_for_denominator to match the columns you want to change, and the column to use as the denominator.
- Click the play icon, and then Close.
includeWeb("JavaScript Array Functions")
var index_stat = "Index";
var main_stat = "Column %";
var columns_to_modify = ["Coca-Cola", "Diet Coke", "Coke Zero", "Pepsi", "Diet Pepsi", "Pepsi Max", "Dislike all cola", "Don't care"];
var column_for_denominator = "Coca-Cola";
form.setSummary("Index " + columns_to_modify.join(", ") + " to " + column_for_denominator);
if (table.availableStatistics.indexOf(main_stat) == -1)
form.ruleNotApplicable(main_stat + " is not available on this table");
if (table.availableStatistics.indexOf(index_stat) == -1)
form.ruleNotApplicable(index_stat + " is not available on this table");
if (table.columnLabels.length != uniqueElementsInArray(table.columnLabels).length)
form.ruleNotApplicable("the column labels contain duplicates");
var target_columns = columns_to_modify.map(function (col) { return table.columnLabels.indexOf(col); });
if (target_columns.some(function (x) { return x == -1; }) ) {
form.ruleNotApplicable(columns_to_modify[target_columns.indexOf(-1)] + " not found in this table");
}
var denominator_column = table.columnLabels.indexOf(column_for_denominator)
if (denominator_column == -1)
form.ruleNotApplicable("there is no column called " + column_for_denominator);
var stats = table.get(main_stat);
var indexes = table.get(index_stat);
target_columns.forEach(function (target_column) {
for (var row = 0; row < table.numberRows; row++) {
indexes[row][target_column] = stats[row][target_column] / stats[row][denominator_column] * 100;
}
})
table.set(index_stat, indexes);
Note that:
- The Indexes are calculated by dividing the Column % in one column by the Column % in the denominator column and multiplying by 100.
- This example will only work on tables that contain Column % and Index.
- This example will not work if there are duplicate column labels in the table.
See also
- Table JavaScript and Plot JavaScript for an explanation of how to run this code.
- Table JavaScript and Plot JavaScript Reference for technical information.
- Table JavaScript and Plot JavaScript Examples Library for other examples.
- JavaScript for information about the JavaScript programming language.
- QScript for tools for automating projects using JavaScript.
- JavaScript Variables for detail on how to create new variables in the Variables and Questions tab using JavaScript.
Pages with syntax highlighting errors
Q Technical Reference
Q Technical Reference
Q Technical Reference > Setting Up Data > Creating New Variables
Q Technical Reference > Updating and Automation > JavaScript > Table JavaScript and Plot JavaScript > Table JavaScript and Plot JavaScript Examples Library