This example code can be used to create a custom JavaScript variable that assigns category Values based on their labels.
Technical details
This code automatically interpolates midpoints from a categorical variable (e.g., 18 to 24, 25 to 34, and 35 to 44). Where only one number appears in a label (e.g., 65 or more) then that number is used as the midpoint. Where no numbers appear in the label, the category is set to missing values.
Method
To use this code you will need to create a new JavaScript Variable, paste the code into the Expression field, and modify the first line so that it refers to the variable being recoded. You can also change the delimiters that are used in the second line. Note that if you change the labels on the input variable, the recoding will automatically update. Also note that while this may look like a lot of code, it has been deliberately written in a rather lengthy way to illustrate how you can create expressions by cutting and pasting various functions together (see JavaScript Examples Library for more examples).
//EDIT replace the following with your variable name
var categoricalvar = AD09N1_2;
var label = Q.Label(categoricalvar);//extracting the label var delimiters = [" to ", "-"]; function AsNumber(x) {return parseFloat(x.replace(/[^0-9.-]+/g, ''))};// a function that extracts the number from a string function AsNumbers(x) {//converts an array of strings into an array of numbers var numbers = []; for (var value in x) numbers.push(AsNumber(x[value])) return numbers;} function MidPoint(array) {//averages any 2 (or 1) numbers in an array if (array.length == 1) return array[0]; return (array[0] + array[1])/2.0;} //comæuting the midpoint function AsArray(input_string, delimiters) { //a function for turning a string into an array var counter = 0; var array = []; while (counter++ <= delimiters.length && array.length < 2) //stops when an array of 2 or more entries is found array = label.split(delimiters[counter-1]); //splitting into an array return array;} MidPoint(AsNumbers(AsArray(label, delimiters)))
See also
Create New Variables - Numeric Variable(s) from Code/Category Midpoints for a QScript which automatically recodes all the variables in a data file.