Questionnaire answer scales using *answers 🔗

This keyword also works great with questionnaires. Particularly if you're a researcher, you may have a lengthy questionnaire where the same answer options are repeated over and over (e.g. "So true of me", "So not true of me"). Likewise, the number of points assigned to each answer option may be consistent across questions.

You could copy and paste your scale beneath each question, but that could get tedious. Instead, you can also use *answers with a scale. Here's an example of how it works:

>> answerScale = [["YES!!!", 4], ["ya sure", 3], ["ehh", 2], ["nope", 1], ["eff no", 0]]
>> reverseScale = [["YES!!!", 0], ["ya sure", 1], ["ehh", 2], ["nope", 3], ["eff no", 4]]

*question: Would you go skydiving buck naked plus parachute gear?
	*answers: answerScale

*question: Is boarding down a volcano your kind of thing?
	*answers: answerScale

*question: Would you rather stare silently at a wall for hours than rappel down a waterfall?
	*answers: reverseScale

In the above "Adventurousness Scale," several questions use the same "YES!!!" to "eff no" answer options. But here's how you simplify adding the scale to *answers :

  1. First, you define a variable (e.g. answerScale ) that contains a collection with several smaller collections. Each smaller collection looks like this: ["text of answer option", point value associated with that answer] (e.g. ["YES!!!", 4] ).
  2. Second, if you have any other scales for other questions, you may wish to create more variables, such as one that includes a reverse scoring of the typical answer options, if needed (like the reverseScale in this example).
  3. Third, you add *answers: yourScaleVariable beneath each question that relies on that scale.

The points assigned to each answer won't be visible on the user's screen, but they will be in the CSV of the data. In the CSV, you'll see a column with each full question, and beneath the column will be the point values of all the responses you've collected (rather than the typical text version of the responses). This will make analyzing your data much easier!

Note: the text version of the user's answer response will not be saved ANYWHERE! The CSV only stores the numeric value of the response, as does the *save keyword. Of course, if you really needed to, later on you could look up the point value in the CSV and check the GuidedTrack code to see what answer it corresponds to.

If you wish to add up a total score, or do other mathematical tricks, you can add a *save keyword with a unique variable to each question. As mentioned, these variables will save the numeric value of the selected response, rather than the response text. At the end of the program, you can add code like:

>> totalScore = variable1 + variable2
-- + variable3 + variable4 + ...

to get a variable of the total score.

*question: Would you go skydiving buck naked plus parachute gear?
	*answers: answerScale
	*save: Q1

You scored {Q1} points on that last question.

Using *placeholder to give a hint 🔗

hint, input, text format, suggestion, sample

The *placeholder attribute is used to display a word or short phrase inside an input box that provides a hint as to the expected type of data that the user is expected to type in. You can use it in all question types that involve typing (e.g., text and paragraph).

Using *placeholder to give a hint (1)

*question: Give your intro:
	*type: paragraph
	*placeholder: Write here something about yourself...

Placeholders are commonly used to give an example of what the user should type:

*question: Please, enter your phone number in international format:
	*placeholder: +1-9999999999

Note that as soon as the user starts typing in the text box, the *placeholder text will disappear, so make sure that any complex instructions that are hard to memorize are displayed elsewhere (for example, using *tip below).

Giving a Tip 🔗

hint, small text, small font, instructions, explanation

Sometimes you might want your question to include an example, or a helpful tip. Doing so is easy with the *tip keyword.

*question: What was your most recent strange dream like?
	*tip: For instance, you might say "I dreamt I turned into a toaster."

The user will see the question asked in normal text. Below it, they will see a lighter-colored text that begins with the words "For instance." Then, they will see the answer box in which to write.

Placing Multiple Questions on One *page 🔗

Putting multiple questions on one page looks something like this:

Placing Multiple Questions on One *page (1)

You can put heaps of questions all on one page, and the regular things that can go on a page, such as text, headers, images, videos, etc., can be added before, between, or after questions.

This keyword is great for creating user "preference" pages or pairing related quiz questions.

Simply add the *page keyword, and indent whatever you want included on that page below.

*page
	*header: Bonobo Trivia

	*question: What percent of our DNA is shared with bonobos?

	*question: How do bonobos solve conflicts?
		Making love
		Making war

GuidedTrack will automatically insert a page break just before your *page keyword and on the bottom of it if there isn't one there already (in the form of a "Next" button"). You can also add your own buttons before *page or as the last thing indented beneath page.

There are certain restrictions with *page . This keyword can only represent one actual screen in GuidedTrack, so adding multiple screens, such as by indenting reponses after multiple choice options, is not allowed.

Providing Default Answers to Questions 🔗

filled in, already filled, starting text

Giving users a little boost in answering a question, or allowing them to revise a previous answer, is possible with *default .

You use *default when you want to pre-populate a question text box with an answer. Or, when you want a multiple choice, checkbox, or slider question to be pre-selected.

Text and paragraph questions 🔗

When a text box is clicked by your users, your default text won't disappear (it's not hint text), but rather your users can submit the answer as-is immediately by clicking submit or edit the text before submitting.

Here's how the code might look (make sure to add the quotes, unless the default will be a variable):

*question: Finish the start of this story.
	*default: "It was a bright cold day in April..."
	*save: story

Here's how the above code would look to the user:

Text and paragraph questions (1)

Checkbox questions 🔗

To use default with a checkbox question, just add all the options you want selected to a collection in *default .

*question: Which of my super awesome hourly newsletters do you want to sign up for?
	*default: ["Catasaurus Rex", "Catopian Dreams", "Kitty Kaleidoscope", "Meow Meow Times"]
	*type: checkbox
	Catasaurus Rex
	Catopian Dreams
	Kitty Kaleidoscope
	Meow Meow Times

Here's how the above code would look:

Checkbox questions (1)

Multiple choice questions 🔗

To give a default answer to a multiple choice question, just write the exact text to the one answer you want preselected.

For example:

*question: Ready for a pop quiz?
	*default: "Yes!"
	Yes!
	No, not really.

Here's how this would look:

Multiple choice questions (1)

Variable values 🔗

You can also use variables with *default , like so (no quotes required):

*question: Make revisions to your story below
	*default: story

Save a User's Answer 🔗

save, store, remember, reuse, variable

It's often nice to remember a specific answer a user has given, such as their name, so that you can use it within your program.

*question: What's your name?
	*save: name
Welcome, {name}!

In the example above, we used the *save keyword to save the user's answer. If the user had typed "Ducky," they would next see, "Welcome, Ducky!" To save the user's answer, you have to type in a unique name or code for the answer you want to save. We wrote name to the right of the *save keyword and later put name in braces because that was the code for the answer we wanted to recall. You can use any kind of code for the answer you want to save, just as long as it only contains letters, numbers, and no spaces.

You can also use the *save keyword with math equations:

  • + addition
  • - subtraction
  • * multiplication
  • / division
  • () parentheses to set operator preference
  • ^ to the power of
*question: How old are you?
	*save: age
That's about {(age-2)*4+21} in dog years.

In the above example, if a user entered an age of 12, their dog years would be calculated like this: (12 - 2) x 4 + 21. Their dog years would be 61.

It is also worth mentioning that spacing does not matter when performing calculations. For example, in order to make it easier to read for yourself, you might want to add spaces around the - , * , and + operators, and write the above equation as:

That's about {(age - 2) * 4 + 21} in dog years

Here are two more examples, using the caret to do exponents and square roots:

Your age squared is {age^2}
The square root of your age is {age^(1/2)}

On the second line, notice that we had to put the 1/2 in parentheses to force that division to be evaluated before the exponentiation. You might recall the order of operations — abbreviated PEMDAS — from your middle school math days. People usually remember them with the mnemonic "Please Excuse My Dear Aunt Sally." But of course that actually stands for "Parentheses, Exponents, Multiplication, Division, Addition, and Subtraction." That's the order in which operations are evaluated in math and in GuidedTrack programs. If we had left the above expression as age^1/2 , then the exponent would've been evaluated first, and then division would've been evaluated, yielding an unexpected answer (if we expected to receive the square root of our age). So, remember to use parentheses if you want to force an operation to be evaluated before other operations!

If you like, you can see examples of using the *save keyword with the *if keyword . This is a more complex way of using *save , which we'll go over later on.

Shuffle Answer Options 🔗

randomize, reorder, random

Did you know that people select the first option in a multiple choice question more often than any other brilliant answer you could have given them? Is it out of laziness? Subconscious beliefs that the first option is best? Reckless captivation of the heart? We don't know.

What we do know is that you can remedy this problem by randomizing your answer options so that your results aren't skewed by position bias.

It's rather easy:

*question: Would you rather...
	*shuffle
	Uncontrollably sneeze after every sentence you spoke
	Uncontrollably fart every time that you laughed

In the above example, users will either see the sneeze option first or the latter possibility.

Just indent a *shuffle beneath any multiple choice, checkbox, or slider question (numeric values excepted) that you'd like to randomize.

Note though that *shuffle is probably not useful for answer options that lie on a continuum (e.g. cold, cool, warm, hot). Shuffle these only if you want to annoy your users.

Summarizing Entered Data 🔗

review, show all answers, display answers

When users answer a question, you can save the question and their answer in order to display both back to them later on. This is great for reminding the user of what they answered to a question previously, or summarizing their previous answers for them. To do this, you use the *tags keyword and the *summary keyword.

*question: Do you like Tiny Tim, considering all he's done for you?
	*tags: TinyTimQuestion

Here is the question you answered about Tiny Tim, and your answer to that question:
*summary: TinyTimQuestion

In this example, we've indented a *tags keyword underneath the question we wanted to recall later. The keyword *tags marks the question as well as the user's response with tags, and "TinyTimQuestion" is what we decided to use as our tag in this case. Below the text "Here is the question you answered..." the *summary keyword was placed, with the name of the tag we want to recall here. After answering the Tiny Tim question, the user will see "Here is the question you answered...", then they will see the text of the Tiny Tim question repeated back to them followed by the answer they provided.

Multiple tags can also be used on the same question and should be separated by commas. Multiple questions can also have the same tag. This allows the user to answer several questions, and then receive a summary of their answers.

*question: What's your favorite number?

*question: What's your favorite color?
	*tags: personal
	Red
	Blue
	Greenwich

*question: What city do you live in?
	*tags: demographics

*question: Do you work with robots?
	*tags: personal, demographics

Here are the personal questions you answered:
*summary: personal

And here are the demographic ones:
*summary: demographics

And here are ALL the questions you answered:
*summary

At the end of this example, the questions and answers tagged as "personal" will be summarized first, followed by the questions and answers tagged as "demographics." Some questions and answers will be summarized in both the personal and demographics summaries because they have both tags. At the end, any question-answer-pair given a *tags keyword (whether they are configured as "personal" or "demographic") will be summarized. The question "What's your favorite color?" will not be summarized though, because it was not given a *tags keyword.

Throw Away the Data You Don't Need 🔗

forget, discard, delete, don't store, don't save

Each question answered is stored as a column in the CSV automatically. If you don't want certain questions and their answers stored, you can use *throwaway . This might be handy if:

  • You're asking users for personally identifiable information (e.g. their name or email) and do not want this information saved in the CSV for privacy reasons.
  • You'd simply like to keep your CSV tidier, and don't want to store data from questions that are not relevant to you.
  • You want to reduce the file size of your CSV, which could become quite massive if users answer the similar but slightly varied questions repeatedly (and you don't need to save those responses).

You can also use *save in conjunction with *throwaway to store just one column of answers as opposed to two. (Otherwise, with *save there is one column of answers with the variable name as a header, e.g. userName , and one column of duplicate answers with the question text as a header, e.g. "What's your name?").

With *save and *throwaway both indented under a *question , the variable name will still be its own header in a column with its answers (i.e., it will not be thrown away!). However, the question itself will not be directly stored in the CSV (i.e., there will not be a duplicate column of answers headed by the question text).

For example, in the program below you want to know how many fruits a person likes out of a list but you don't need to know which ones in particular they like:

>> numberOfFruitsUserLikes = 0

*question: Do you like pears?
	*throwaway
	Yes
		>>numberOfFruitsUserLikes = numberOfFruitsUserLikes + 1
	No

*question:Do you like apples?
	*throwaway
	Yes
		>>numberOfFruitsUserLikes = numberOfFruitsUserLikes + 1
	No

*question:Do you like bananas?
	*throwaway
	Yes
		>>numberOfFruitsUserLikes = numberOfFruitsUserLikes + 1
	No

You like {numberOfFruitsUserLikes} out of 3 types of fruit.

Or let's say you ask the user for their email address but you're just going to use it from within the program and do not want it stored in the CSV file:

*question: What is your email?
	*save: email
	*throwaway

*email
	*subject: I'm writing to you
	*to: email
	*body
		But I will not keep your address after the email is sent

>> email = ""

Note that *throwaway can only be used to keep a question — with its answers — from being written in the file, but you need to store temporarily the answer in a variable so that you can use it. Since you cannot *throwaway variables, you will need to overwrite it like in the example so that the column with the header "email" has blanks for every run.


Next: