This QScript shows an example of how to automatically add Top and Bottom 2 or 3 NETs to all questions in your data set.
Method
This script performs the following tasks:
- Creates top and bottom two box scores for questions with a five point scale.
- Creates top and bottom two and three box scores for questions with seven point scales.
- Places all the modified tables in a folder.
var new_group = project.report.appendGroup();
new_group.name = "Tables with Top and Bottom boxes";
for (var data_i in project.dataFiles) {
var data = project.dataFiles[data_i];
// All questions in this data file.
for (var q_i in data.questions) {
var q = data.questions[q_i];
// But only non-hidden Pick One (and Multi) questions.
if ((q.questionType == "Pick One" || q.questionType == "Pick One - Multi") && !q.isHidden) {
// Don't consider missing values.
var values = q.uniqueValues;
// Search backwards through the list, because every time we remove a value,
// the list gets smaller.
for (var value_i = values.length - 1; value_i >= 0; value_i --) {
if (q.valueAttributes.getIsMissingData(values[value_i]))
values.splice(value_i, 1);
}
// Only questions with 5 or 7 non-missing values.
if (values.length == 5 || values.length == 7) {
// Add bottom/top two boxes.
var bottom_label = "Bottom 2 Box";
var top_label = "Top 2 Box";
try {
q.dataReduction.createNET([q.valueAttributes.getLabel(values[0]),
q.valueAttributes.getLabel(values[1])],
bottom_label);
q.dataReduction.createNET([q.valueAttributes.getLabel(values[values.length - 2]),
q.valueAttributes.getLabel(values[values.length - 1])],
top_label);
} catch (error) {
log("Ignored question " + q.name + " because the top 2/bottom 2 box values could not be found in its dataReduction.");
continue; // skip this question
}
q.dataReduction.moveAfter(bottom_label, null);
q.dataReduction.moveAfter(top_label, null);
// Add bottom/top three boxes.
if (values.length == 7) {
bottom_label = "Bottom 3 Box";
top_label = "Top 3 Box";
q.dataReduction.createNET([q.valueAttributes.getLabel(values[0]),
q.valueAttributes.getLabel(values[1]),
q.valueAttributes.getLabel(values[2])],
bottom_label);
q.dataReduction.createNET([q.valueAttributes.getLabel(values[values.length - 3]),
q.valueAttributes.getLabel(values[values.length - 2]),
q.valueAttributes.getLabel(values[values.length - 1])],
top_label);
q.dataReduction.moveAfter(bottom_label, null);
q.dataReduction.moveAfter(top_label, null);
}
// Show it in a new table.
var t = new_group.appendTable();
t.primary = q;
}
}
}
}
log("All done");