Waardetoewijzingen

Inleiding

De waardetoewijzing is een enquête-element dat kan worden gebruikt om in een interview een variabele met een bepaalde inhoud te vullen. Het kan worden gebruikt voor deze 3 soorten variabelen:

  • enquêtevariabele (bv. vooraf vullen met een antwoord)
  • sample-/panelvariabele (bv. een antwoord naar het sample/panel overzetten)
  • aangepaste variabele (bv. opslaan van een berekende score)
Hoe creëer ik een aangepaste variabele?

Variabelen die door een gebruiker zijn gedefinieerd, horen niet bij een specifieke vraag of een sample/panel. Ze zijn alleen beschikbaar in de enquête waarvoor ze zijn aangemaakt. Om ze aan te maken, heeft u een waardetoewijzing (2) nodig, die via “Inhoud toevoegen” (1) in de enquête kan worden ingevoegd. Bij de instellingen aan de rechterkant kunt u op de knop “Waardetoewijzing” (3) klikken. Er wordt een venster geopend waarin u de naam van de variabele (4) kunt invoeren en het datatype (5) kunt specificeren.

Uitvoeringsopties

Waardetoewijzingen kunnen overal in de enquête worden ingevoegd. Bij een waardetoewijzing wordt echter altijd direct ervoor een pagina-einde gecreëerd. Net als bij bijna alle andere enquête-elementen kunnen filtervoorwaarden voor het tonen (=uitvoeren) of verbergen (= overslaan) worden ingesteld. Bovendien zijn er 4 opties waarmee de uitvoering van een waardetoewijzing kan worden gestuurd:

  • bij het laden
  • alleen de eerste keer
  • elke keer (standardinstelling)
  • altijd
De 4 opties voor het uitvoeren van een waardetoewijzing in detail

Uitvoeringsoptie Beschrijving
bij het laden van de enquête De waardetoewijzing wordt alleen in deze twee situaties uitgevoerd:
– wanneer een interview wordt geladen (ook na een onderbreking)
– wanneer de taal van het interview wordt gewijzigd en het interview dus opnieuw wordt geladen
slechts één keer als de deelnemer deze positie passeert De waardetoewijzing wordt slechts eenmaal uitgevoerd, wanneer de deelnemer de desbetreffende positie in de enquête passeert. Indien een filter de uitvoering verhindert, dan wordt de waardetoewijzing als “niet uitgevoerd” beschouwd, zodat, indien de filtervoorwaarde van toepassing is, de eenmalige uitvoering op een later tijdstip plaatsvindt.
elke keer, als de deelnemer deze positie passeert De waardetoewijzing wordt telkens opnieuw uitgevoerd, wanneer de deelnemer de desbetreffende positie in de enquête passeert. Het maakt hierbij niet uit hoe vaak de deelnemer de Vorige-knop gebruikt en met de Volgende-knop weer langs de eerstgenoemde positie komt.
altijd (onmiddellijk na elke wijziging in een betrokken variabele) De waardetoewijzing vindt plaats onmiddellijk nadat een antwoord is ingevoerd of gewijzigd en voordat op de Volgende-knop wordt geklikt. Dit maakt het mogelijk dynamische inhoud op een pagina weer te geven, afhankelijk van de invoer van de deelnemer (bv. automatische berekening van totalen).

Basisfuncties

De inhoud die in een variabele moet worden geschreven, kan – afhankelijk van het datatype – een getal, een tekst, een datum, enz. zijn. Er zijn echter ook berekenings-, numerieke of tekstfuncties beschikbaar, die hieronder met behulp van voorbeelden worden opgesomd. We zullen met de eenvoudige functies beginnen:

Rekenkundige bewerkingen

Als u een variabele met een berekende waarde wilt vullen, kunnen op eenvoudige wijze rekenkundige bewerkingen worden ingezet:

  • Optellen: +
  • Aftrekken: –
  • Vermenigvuldigen: *
  • Delen: /

Met behulp van haakjes ( ) kan de prioriteit van een deelberekening worden gedefinieerd.

Voorbeeld automatische som

De deelnemer moet de omzet in de afzonderlijke regio’s registreren. Het totaalbedrag wordt automatisch berekend.

Het meest geschikte vraagtype voor deze opdracht is een matrixvraag (met de variabelenaam “turnover”). De matrix heeft 1 kolom (gegevensinvoer “Tekst”). Het antwoordgegevenstype voor deze tekst is “Geheel getal”. Voor elk van de 4 regio’s is een rij beschikbaar. Daarnaast is er een 5e rij voor de som. Aangezien de som onmiddellijk moet worden berekend, moet voor de waardetoewijzing de uitvoeringsoptie “altijd” zijn ingesteld. Het maakt niet veel uit waar deze waardetoewijzing in de enquête wordt geplaatst. Het verdient echter aanbeveling deze aan het begin of direct na de pagina met de matrixvraag te plaatsen.

** autosum (anytime execution)
turnover_5_1 = turnover_1_1 + turnover_2_1 + turnover_3_1 + turnover_4_1
** read only setting
setSurveyFieldsReadOnly(turnover_5_1)

Bij de waardetoewijzing is geen variabele geselecteerd. In plaats daarvan wordt de doelvariabele turnover_5_1 als eerste in de eerste regel genoemd. Na het isgelijkteken wordt de te berekenen som vermeld. Aangezien de deelnemer het somveld niet mag invullen, kan de functie setSurveyFieldsReadOnly() worden gebruikt om het veld waarnaar de variabele verwijst in “alleen-lezen” modus te zetten. Als het niet duidelijk is wat de precieze namen van de variabelen zijn, kunt u het beste kijken naar het Code Plan van een exportbestand van ruwe gegevens dat op de pagina ‘Analyseren’ kan worden aangemaakt.

Numerieke functies

Naast de rekenkundige basisbewerkingen kunnen ook andere numerieke functies worden gebruikt. De volgende voorbeelden tonen vaak gebruikte extra functies:

  • kwadrateren (verheffen tot de macht van …)
  • worteltrekken
  • afronden op decimalen
  • modulo (restgetal van een deling)
** auxiliary variable
a = 5

** square and root
integer1 = a^2
real1 = sqrt(a)
** round to … decimal
real2 = round(real1,2)
** modulus (remainder after division by …)
integer2 = a%2

De berekende variabele waarden (getoond in een tekstblok) zien er als volgt uit:

Daarnaast zijn er numerieke functies die meerdere variabelen verwerken, zoals willekeurige selectie of statistische berekeningen. De volgende voorbeelden laten zien:

  • randomisatie en aselect getal
  • rekenkundig gemiddelde
  • rekenkundig gemiddelde dat N/A antwoorden en missers uitsluit
** auxiliary variables
a1 = 2
a2 = 3
a3 = 5
a4 = null
min = 2
max = 5

** randomization and random number
integer3 = pickRandom([a1,a2,a3])
integer4 = random(min,max)
** arithmetic mean
real3 = mean(a1,a2,a3)
** arithmetic mean recognizing N/A answers and missings
naFilter(x) = x!=0 and x!=null
real3 = mean(filter([a1,a2,a3,a4],naFilter))

Randomisatie sorteert op willekeurige wijze een bepaalde lijst van variabelen. Met de functie pickRandom() wordt het eerste element van de willekeurig gesorteerde lijst uitgevoerd. Het aselecte getal dat met de functie random() wordt gegenereerd, is daarentegen een willekeurig gekozen geheel getal tussen een minimum- en een maximumwaarde (minimum en maximum inbegrepen). De functie mean() is een voorbeeld van typische statistische berekeningen. Als er in de antwoorden missers zitten, moeten die er nog worden uitgefilterd. Dit wordt gedaan met behulp van de gebruikersgedefinieerde functie naFilter. De berekende variabele waarden (getoond in een tekstblok) zien er als volgt uit:

Tekstfuncties

De waardetoewijzingen kunnen niet alleen voor numerieke transformaties, maar ook voor tekstinhoud worden gebruikt. De belangrijkste tekstfuncties zijn:

  • teksten samenvoegen
  • substrings zoeken
  • teksten vergelijken
** auxiliary variables
postalcode = "CH-8005"
town = "Zürich"

** concatenation
text1 = concat(postalcode," ",town)
** substring verification
text2 = postalcode[4:7]
integer1 = indexOf(postalcode,"8005")
integer2 = indexOf(postalcode,"5008")
** text comparison
boolean1 = equals(town,"Zürich")
boolean2 = equals(town,"Utrecht")

De variabele waarden uit de voorbeelden (getoond in een tekstblok) zien er als volgt uit:

Bij het samenvoegen van teksten worden de afzonderlijke tekstdelen/tekstvariabelen, door komma’s gescheiden, in de functie concat() ingevoegd. Om een substring van en naar een bepaalde positie te extraheren, worden de begin- en eindpositie tussen vierkante haken achter de tekstvariabele gezet, gescheiden door een dubbele punt. Als u een specifieke substring zoekt, gebruik dan de indexOf() functie en schrijf de tekstvariabele en de gezochte substring tussen haakjes. Merk op dat het eerste teken de positie 0 heeft. Als de gezochte string niet voorkomt, is het resultaat -1. Het laatste voorbeeld toont een geslaagde en een mislukte tekstvergelijking. Het resultaat is ofwel “true” ofwel “false” (in elke interviewtaal worden de Engelse uitdrukkingen geretourneerd).

De tekstvergelijking, zoals in het voorbeeld hierboven, is de enige manier om een filtervoorwaarde te maken die de exacte overeenkomst van de inhoud van twee tekstvariabelen controleert.

Datumfuncties

Waardetoewijzingen kunnen worden gebruikt voor data die tijdens het huidige interview moeten worden gecontroleerd om te zien of ze binnen een bepaalde tijdspanne vallen, voor of na een vaste datum liggen of een maximale afwijking ten opzichte van de huidige datum niet overschrijden. Daartoe wordt de datum omgezet in een datumtijdstempel, wat niets anders is dan een opeenvolgend getal dat begint met 0 op een vast tijdstip in het verleden en praktisch doorloopt tot in het oneindige. Elke datum heeft een kenmerkende tijdstempel. Het verschil tussen de tijdstempels van twee opeenvolgende dagen is altijd hetzelfde.

De functie date2number() bepaalt de tijdstempel van de opgegeven datum (om 0 uur UTC) tot op de milliseconde nauwkeurig. Een dag heeft 86 400 000 milliseconden, zodat de tijdstempel gedeeld door 86 400 000 het aantal dagen sinds het starttijdstip in het verleden aangeeft. Als u een gegeven datum wilt vergelijken met de huidige dag van het interview, dan kunt u de functie today() gebruiken om de tijdstempel van de interviewdatum te bepalen en dan het verschil te vormen. In de waardetoewijzing zou het er zo uitzien:

** date timestamp of participant answer stored in variable "date"
integer1 = date2number(date)/86400000
** date timestamp of today
integer2 = date2number(today())/86400000
** difference (number of days) between participant answer and today
integer3 = integer1 - integer2

Waardetoewijzing in berekeningsfilters

Een kleine tip betreffende de filtervoorwaarden: In filtervoorwaarden van het type “Berekening” kunt u variabelen en/of berekeningen met elkaar vergelijken. De overeenkomstige velden gebruiken dezelfde functies als waardetoewijzingen, zodat in principe alle hier beschreven functies ook in berekeningsfilters kunnen worden gebruikt.

Voorbeelden voor berekeningsfilters

De controle van een constante som is een voorbeeld van een berekeningsfilter met numerieke variabele waarden. Beginsituatie: De deelnemer moet precies 100 punten of 100% verdelen over de opgesomde opties. U voegt nu een validatie toe die met behulp van een filter een validatietekst moet weergeven, indien de som niet gelijk is aan 100. Het filter van het type “berekening” gebruikt de basisfuncties van de rekenkundige bewerkingen. Aan de linkerkant worden de variabelen van de afzonderlijke opties opgeteld. Aan de rechterkant wordt de waarde 100 ingevoerd. Beide worden gelijkgeschakeld:

Voor een berekeningsfilter voor tekstvariabelen waarbij moet worden nagegaan of twee variabelen precies dezelfde inhoud hebben, moet de functie equals() worden gebruikt die bij de tekstfuncties werd getoond. De invoer aan de rechterkant van het berekeningsfilter kan niet onderscheiden of het om tekst of om een variabelenaam gaat. Er wordt steeds van tekst uitgegaan. De tekstvergelijking moet dus via de genoemde functie en met de waarden “true” of “false” worden ingesteld:

Het berekeningsfilter wordt ook gebruikt bij het vergelijken van twee datums. Beide datums worden omgezet in numerieke tijdstempels – zoals beschreven voor de datumfuncties – waarmee vervolgens een vergelijking kan worden gemaakt. De gebruikte functie date2number() kan zowel links als rechts in de filtervoorwaarde worden vermeld.

Complexe functies

Voor complexe gebruiksgevallen of voor wetenschappelijk gebruik zijn diverse geavanceerde functies beschikbaar. Enkele daarvan worden hieronder opgesomd. Voor de waardetoewijzingen wordt van de Math.js bibliotheek gebruik gemaakt. De Math.js online-documentatie kan voor aanvullende informatie worden geraadpleegd. Voor klanten zonder SLA (Service Level Agreement) wordt geen verdere ondersteuning met betrekking tot de complexe functies geboden.

Volgende knop en Vorige knop functionaliteit

Om het gedrag van de Volgende knop en de Vorige knop te regelen, zijn de volgende functies beschikbaar:

  • Volgende knop pas na een bepaald aantal seconden tonen
  • Volgende knop na een bepaald aantal seconden automatisch aanklikken
  • Volgende knop verbergen en na een bepaald aantal seconden automatisch aanklikken
  • Vorige knop verbergen
** hide next button for 5 seconds
NextButton("hide",5)
** click next button automatically after 5 seconds
NextButton("click",5)
** hide next button and click automatically after 5 seconds
NextButton("hideandclick",5)
** hide back button
BackButton("hide")

De knoppen verschijnen altijd aan het eind van een pagina. Met behulp van een waardetoewijzing wordt altijd direct ervoor een pagina-einde gecreëerd. Daarom moet de waardetoewijzing met de knopfuncties aan het begin van de gewenste pagina worden geplaatst. Indien er op deze positie in de enquête nog andere waardetoewijzingen zijn, moeten deze vóór de waardetoewijzing met de knopfuncties worden geplaatst. De standaardoptie “altijd” moet als uitvoeringsoptie worden geselecteerd.

Datatypes converteren

Er zijn situaties denkbaar waarin de gegevens zijn opgeslagen in variabelen waarvan het datatype de verdere verwerking van de gegevens belemmert en een conversie van het datatype noodzakelijk wordt. Dit zijn meestal getallen die in een tekstvariabele worden opgeslagen. Of andersom, u wilt getallen (bv. jaartallen) in een vast formaat zonder automatisch duizendtalscheidingsteken, zodat ze in een tekstvariabele moeten worden opgeslagen. Dit zijn de belangrijkste functies voor het converteren van datatypes:

** conversion string to integer number
integer1 = parseNumber("12345")
** conversion string to real number
real1 = parseReal("12345.67")
** conversion real or integer number to string
text1 = convertToString(12345.670)

Een blik op de inhoud van de nieuwe variabele (getoond in een tekstblok) toont de getallen die voorheen als tekst waren opgeslagen met getalopmaak (duizendtal- en decimale scheidingstekens, alsmede 3 decimalen bij gebroken getallen). Het vroegere gebroken getal, dat nu in een tekstvariabele staat, heeft geen getalopmaak en de laatste 0 (3e decimaal) werd automatisch verwijderd:

Als-Dan-Anders functie (if-then-else)

Als u een variabele op een andere manier wilt vullen, afhankelijk van de inhoud van een andere variabele, dan kan de Als-Dan-Anders functie worden gebruikt. Deze functie gebruikt een speciale syntaxis die nauwkeurig moet worden aangehouden:

Als-voorwaarde ? Dan-verklaring : Anders-verklaring

De dubbele punt (inleiding van de Anders-verklaring) is verplicht. Verder moet er altijd een verklaring op volgen die bijvoorbeeld ook variabeleXY=variabeleXY kan zijn en geen actie teweegbrengt. Indien een is-gelijk vergelijking van variabelen en waarden in de Als-voorwaarde voorkomt, dan moet er een dubbel gelijkheidsteken worden gebruikt. Het enkele gelijkheidsteken houdt altijd een opdracht in, nooit een vergelijking. En als u verschillende Als-Dan-Anders functies in elkaar nest omdat er meer dan slechts 2 verschillende expressies zijn, dan moet de bovenstaande syntaxis voor elk nestingsniveau worden aangehouden. Het is raadzaam om voor de duidelijkheid met haakjes te werken; ze zijn echter niet verplicht.

** basic if-then-else clause example
integer1==2 ? integer2=5 : integer2=integer2
** nested if-then-else clause example
integer1==2 ? integer2=5 : (integer1==3 ? integer2=7 : integer2=11)

Lijstfunctie

De lijstfunctie maakt het u eenvoudig om vragen te maken die steeds dezelfde antwoordmogelijkheden gebruiken, maar alleen de antwoordmogelijkheden moeten weergeven die in de eerste vraag als “bekend” gemarkeerd zijn. Met behulp van filters, die voor elke antwoordmogelijkheid afzonderlijk moeten worden ingesteld, kunt u deze tamelijk tijdrovende activiteit uitvoeren zonder van waardetoewijzingen gebruik te maken. De hier getoonde functie bespaart de enquêteprogrammeur de noodzaak om een groot aantal afzonderlijke filters te creëren.

De uitgangssituatie voor het voorbeeld is als volgt: In een eerste vraag met de variabelenaam “brand” wordt een lange lijst van bijvoorbeeld mineraalwatermerken getoond. De deelnemer moet bij deze meerkeuzevraag alle bekende merken aankruisen. In de vervolgvraag (een enkelekeuzevraag met de variabelenaam “bestbrand”) wordt de deelnemer gevraagd naar zijn/haar favoriete merk. Uiteraard moeten alleen de merken worden weergegeven die eerder als “bekend” zijn aangemerkt. In de waardetoewijzing, die zich tussen de twee vragen bevindt, moeten de functies visibility en setChoicesVisibility worden opgenomen:

** function that returns true or false for each answer option of "brand" question
visibility(choice) = answer(concat('brand_',choice.code)) == 1 ? true : false
** setChoicesVisibility processes the visibility function for "bestbrand" question
setChoicesVisibility('bestbrand',visibility)

Om de lijstfunctie te kunnen gebruiken, moeten een paar dingen in acht worden genomen:

  • De eerste vraag moet een meerkeuzevraag zijn. Elke antwoordmogelijkheid heeft een aparte variabele die bestaat uit de variabelenaam (“brand”), een onderstrepingsteken en het variabele achtervoegsel voor de desbetreffende antwoordmogelijkheid. In de functie visibility moet het onderstrepingsteken achter de variabelenaam worden vermeld, opdat de functie concat() de juiste labels kan bepalen.
  • Bij de vervolgvragen moeten voor de antwoordmogelijkheden precies dezelfde variabele achtervoegsels (of waarden in het geval van enkelekeuzevragen) als voor de eerste vraag worden gebruikt, aangezien de koppeling via deze variabele achtervoegsels plaatsvindt. De labels kunnen wel anders zijn geformuleerd.
  • De vervolgvragen kunnen geen extra antwoordmogelijkheden bevatten die niet in de lijst voorkomen. Alleen de optie N/A is aanvullend mogelijk.
  • Als het bij de vervolgvraag om een matrixvraag gaat, dan wordt de lijstfunctie op de rijen toegepast. De variabele achtervoegsels van de rijen moeten dan overeenstemmen met de variabele achtervoegsels van de antwoordmogelijkheden uit de eerste vraag.
  • De functie visibility is een door de gebruiker gedefinieerde functie. Deze kan dus ook een andere naam hebben. Het is ook mogelijk meerdere van dergelijke functies met verschillende namen te creëren, zodat in één enquête verschillende lijsten kunnen worden gebruikt.

Antwoordteller

Met bepaalde functies kunt u de antwoorden van alle vorige deelnemers aan de enquête in waardetoewijzingen tellen en in het interview beschikbaar stellen. Aan de ene kant zijn er functies die alle interviews in de desbetreffende status tellen (voorbeeld 1); aan de andere kant is er een functie waarbij u zelf de telvoorwaarde kunt definiëren (voorbeeld 2).

Voorbeeld 1 toont de functies voor het tellen van alle beëindigde en alle begonnen interviews van deze enquête. Het interview van de deelnemer behoort op het moment van de telling tot de gestarte interviews. Als het interview is beëindigd, verandert het in de voltooide interviews.

** get the total of all started or completed interviews
counter1 = survey.count_started
counter2 = survey.count_completed

Uitgangspunt voor voorbeeld 2 is de volgende situatie. Een evenement wordt meerdere malen op verschillende tijdstippen aangeboden, zodat iedere deelnemer die zich wil inschrijven zijn of haar datum naar eigen goeddunken kan kiezen. De capaciteiten zijn echter beperkt. Als een datum volgeboekt is, moet deze uit de selectie worden verwijderd. Om dit te doen, moet u weten hoeveel aanmeldingen er al voor elke afzonderlijke datum zijn. De datumselectie vindt via een enkelekeuzevraag met de variabelenaam “eventtime” plaats. Alleen afgeronde interviews worden meegeteld. Dit is hoe de waardetoewijzing eruit zou kunnen zien:

** get the total of each answer (only completed interviews)
counter1 = countInterviews(eventtime==1 and survey.State=='Completed')
counter2 = countInterviews(eventtime==2 and survey.State=='Completed')
counter3 = countInterviews(eventtime==3 and survey.State=='Completed')
counter4 = countInterviews(eventtime==4 and survey.State=='Completed')

De functie countInterviews() kan in principe elke filtervoorwaarde bevatten. Indien meerdere variabelen worden gebruikt, kunnen deze met “and” of “or” worden gekoppeld. Hierbij zijn dezelfde voorrangsregels als bij de elementfilters van toepassing. Als de interviewstatus deel moet uitmaken van de filtervoorwaarde, moeten labels worden gekozen die ook in de ruwe gegevensexport bij “Status” worden vermeld (geen verschil in diverse interviewtalen).

Datatypes Matrix en JSON

Wanneer u een gebruikersgedefinieerde variabele aanmaakt, kunt u kiezen tussen “Matrix” en “JSON” als datatype. Dit zijn twee speciale datatypes voor speciale functies die in een betaalde cursus in detail kunnen worden uitgelegd. Hieronder vindt u een voorbeeld van de wijze waarop een matrixvariabele en een JSON-variabele worden gevuld:

** matrix with 2 rows and 3 columns
matrix1 = [[1,-3,2],[1,2,7]]
** json with typical tree structure
json1 = toJSON({"tree":[{"branch1":[{"name":"new","leaves":12}]},{"branch2":[{"name":"old","leaves":null}]}]})

Een matrix kan worden gebruikt om de gebruikelijke berekeningen uit te voeren, zoals optellen en vermenigvuldigen. Een JSON-variabele kan worden gebruikt als een uitgebreide lijst (bv. postcodes en bijbehorende plaatsnamen) die vanuit de enquête kan worden geraadpleegd.

Functieverwijzing

Aan een uitvoerige functieverwijzing wordt nog gewerkt; deze zal hier later nog worden opgenomen.

Updated on september 8, 2021

Was this article helpful?

Related Articles