Have an idea?

Visit Sawtooth Software Feedback to share your ideas on how we can improve our products.

Max Responses

I have three versions of the same survey in one questionnaire and link.
 They all have the same start and end, only the middle part (core questionnaire related to one study site) is randomized .  
the structure looks like this:
common introduction-randomized (tay, Forth, Clyde group of questions)-common end.

I want to create two types of quotas:

-A  max 60 responses for the pilot. I tried to create a quota but it asked me to link it with a question, and I don't know how to do it in general not according to a question response.

-A quota for each Tay, Forth and Clyde survey. I am not sure how to do this. If I put a quota question before the randomization (the one that randomizes Tay, Forth or Clyde questions) and lead them to a message saying we reach the survey limits they will be categorized as disqualified responses.
For example if I reach 30 (max limit) in Tay, the future people getting the tay questionnaire will be send to the disqualification message even though they might be useful for answering other versions of the survey (eg. Forth or Clyde questionnaire).
Is there any way of sending them to the other questionnaire versions (if they haven't reached the limit) or to a disqualifying message (when the limit has been reached)?

-Finally I wanted to ask how you managed to get a representative sample on age and gender. Did you also use quotas associated with that question responses?
asked May 3, 2016 by valeria Toledo
edited May 3, 2016 by Walter Williams

1 Answer

0 votes
You can create a constructed list and a quota question that will assist in selecting the correct survey for you.

Let's first create a parent list called SurveyList and define it as such ...


Create a quota question and call it QTSurvey. Define 3 quota definitions for each survey type as follows ...

Value=1 / Cell Name=Tay / Cell Limit=your target / Logic=ListValue(SurveySelectList,1)=1

Value=2 / Cell Name=Forth / Cell Limit=your target / Logic=ListValue(SurveySelectList,1)=2

Value=3 / Cell Name=Clyde / Cell Limit=your target / Logic=ListValue(SurveySelectList,1)=3

Now we can create a constructed list called "SurveySelectList". Enter this code into the constructed list ...
Begin Unverified Perl
 my $i=1;
 for($i=1; $i<=3; $i++)
   if (ISQUOTACELLOPEN("QTSurvey",$i))
End Unverified

This constructed list will check the 3 quota cells for Tay, Forth and Clyde. Each will be added to the list if their respective quota is open at the time. We then randomise them.

The survey selected will be stored in the first element of the "SurveySelectList" constructed list. You can access it in skips by using ...

Tay - ListValue(SurveySelectList,1)=1
Forth - ListValue(SurveySelectList,1)=2
Clyde - ListValue(SurveySelectList,1)=3

You can create 2 separate quota questions for Gender and Age.  Their logic will based on the actual question rather than a constructed list (e.g  if Q1 is the Gender question, the logic would be Q1=1 for male and Q1=2 for female). Make sure you place these quota questions AFTER the Gender and Age questions have been answered. If the Gender and Age quotas have been satisfied, then you can move onto the survey select quotas I have defined above.

If you are implementing a pilot, you can do this in a separate pilot survey and set your quota targets accordingly. If you want it all together (pilot + main), you can modify the code I have supplied and targets depending on what you want to achieve.

Hope that gets you sorted. Regards.
answered May 4, 2016 by Paul Moon Platinum (76,675 points)
edited May 4, 2016 by Paul Moon
Hi I am sorry but I am quite new on this software. I also need to specify that this questionnaire is only for the pilot.

I have a few questions.
Does this approach work if I need to have only one link for all versions of the survey (panel company requested that)?
Where I createt the constructed  list?
I understand the code you sent me but have a few questions. What happen if all the quotas are closed, does it send it to the end of survey?  How does this approach link to the actual core questionnaire i defined earlier?
For now I just randomized Q1tay, q1forth and Q1clyde. Then if they got Q1 tay they are directed to q2tay with a skip logic (a similar logic applied to three versions). Now my question will be if thia logic will be still applicable with your code?

And how to relate them?
This solution I have provided certainly works within the one survey for the one survey link. I tested it successfully at my end.

So you can have the following structure ...

Front end
Quota processing - assess age and gender and then survey type (Tay / Forth / Clyde)
Tay survey section OR Forth survey section OR Clyde survey section (depending on the quota processing)
Back end

My quota question QTSurvey and my constructed list SurveySelectList work together as a team to determine the survey pathway - Tay / Forth / Clyde. The survey pathway is stored as the 1st list item in my constructed list SurveySelectList.

To create the constructed list, you need to click on the notepad icon at the top. It is between the screw driver icon and the key icon. Once you have done this, you will see a button in the bottom left hand corner called "Add constructed list". Click on this. Insert my script into the window that is titled "Constructed List Instructions". Select SurveyList as your parent list. Give this constructed list a name called "SurveySelectList". Now hit the OK button to save this constructed list.

If you have ALL quotas filled, then every future attempt to complete a survey will send it to the termination page you direct your disqualified / terminating surveys to. You can modify quota targets midway through field work if you desire and open quotas up.

You can use skips to direct the survey to the correct pathway. The logic you should use is as follows ...

If Tay is selected in the constructed list, SurveySelectList, then you should skip to the Tay section of the survey by inserting the following logic in the skip ...
Tay - ListValue(SurveySelectList,1)=1

This is the skip logic for Forth ...
Forth - ListValue(SurveySelectList,1)=2

And this is the skip logic for Clyde ...
Clyde - ListValue(SurveySelectList,1)=3

If you need me to send you an example, I'd be happy to assist. I think seeing a working example would be a good way to get you up and running. It's after midnight here in Australia so if I don't get to it now, I will certainly whip it up in the morning.

I am assuming you have v8 or v9?

Send your email to paulmoon@aapt.net.au if you need a working example.

All the best.
I have sent you an ssi file example to your personal email address. This should assist you with your queries. Thank you.
Hi Paul,
Your code work well, thanks for that. Doing the analysis of the data, I realized that  the QSURVEY variable is not working properly. I believe this variable capture the type of survey people were directed to, but in case these survey was full that does not necesarily means that this will be the variable answer at the end.
Do you know if there is any way to create a variable which gives me the actual result?. Maybe some code that test when respondents reached the last question of each survey?.
The survey selected will be stored in the first element of the "SurveySelectList" constructed list.
Me, again. I noticed some problems so I have more questions.

1.Do you always need to add a skip logic into each quota question? If so, how can I add a skip logic (that directs to the main body) without skipping the introductory questions?

 2.The quotas are not working properly.  They limit the number of responses BUT don't recognise the survey answered.
In the administrative page it tells me I have one completed survey (1  /10 ) for the Forth version, but when I look at view data, I can see that the completed survey is answering the Forth version.
Can you imagine why is this is happening?
I only use skips to jump the sections - Tay, Forth, Clyde.

If you don't need to skip over other questions, make sure you have checked all your skips before hand.

So assume the following ...

Screener questions S1-S5.
Quota assessment - QTSurvey and any other quotas (age / gender).
Tay section consists of questions T1-T10.
Forth section consists of questions F1-F10.
Clyde section consists of questions C1-C10.
Demographics D1-D10.

I would pop in 3 pre-skips as follows ...

Skip From:T1
Skip To:F1
Logic: Not(ListValue(SurveySelectList,1)=1)

Skip From:F1
Skip To:C1
Logic: Not(ListValue(SurveySelectList,1)=2)

Skip From:C1
Skip To:D1
Logic: Not(ListValue(SurveySelectList,1)=3)

In your quota question, respondents who do not qualify generally skip to a terminate question which is setup under the settings tab of your quota question(s).

It sounds like your quota logic is setup incorrectly?

Logic: ListValue(SurveySelectList,1)=1

Logic: ListValue(SurveySelectList,1)=2

Logic: ListValue(SurveySelectList,1)=3

If you want me to check your ssi file, send it through to paulmoon@aapt.net.au.