Mer komprimert omkoding av variabler: inlist og inrange
Funksjonene inlist
og inrange
kan brukes til å sette opp komprimerte kodeuttrykk for koding av variabler, slik at skript blir mer oversiktlige og mindre ressurskrevende å kjøre.
Disse funksjonene er ideelle dersom man vil lage omfattende kodebetingelser, som oftest i kombinasjon med generate
– og replace
-uttrykk, f.eks. dersom man vil lage en grov gruppering av kommuner, der man trenger å liste opp større sett med kommunekoder.
Inlist-funksjonen
Ved koding/omkoding av variabler basert på lange if-betingelser, kan funksjonen inlist
være nyttig å bruke. Et eksempel er om man ønsker å lage en variabel som tar verdien 1 for personer som er bosatt i et utvalg av 100 kommuner. Dette ville gitt en generate
– evt. replace
-kommando med et svært langt if-uttrykk. Ved bruk av inlist
kan man gjøre dette mer komprimert ved å liste opp alle kommunenumrene separert med komma inni en funksjonsparentes.
Den logiske funksjonen inlist
settes til 1 (“true”) dersom verdien i det første argumentet finnes blant de resterende argumentene.
Argumentene til funksjonen kan være både variabler og verdier (alle typer).
Eksempler:
generate var = 1 if inlist(sivstand, 1, 3, 5)
(inlist-funksjonen = 1 (“true”) dersom sivstand = 1, 3 eller 5)generate var = 1 if inlist('1', regstat09, regstat10, regstat11)
(inlist-funksjonen = 1 (“true”) dersom minst en av regstat-variablene = ‘1’)
Eksemplene over tilsvarer disse uttrykkene:
generate var = 1 if sivstand == 1 | sivstand == 3 | sivstand == 5
generate var = 1 if regstat09 == '1' | regstat10 == '1' | regstat11 == '1'
Inrange-funksjonen
I tillegg til inlist
finnes det en annen logisk funksjon som kan gjøre det lettere å lage betingelser basert på intervaller: inrange
. If-betingelser som baserer seg på intervaller blir sjeldent særlig lange, siden man som oftest bare trenger å spesifisere en minimums- og en maksimumsverdi. Men dersom man opererer med flere intervaller i ett og samme if-uttrykk, kan inrange
være nyttig. Uansett blir kodesyntaksen mer komprimert i forhold til vanlige if-uttrykk ved bruk av denne funksjonen.
Den logiske funksjonen inrange
settes til 1 (“true”) dersom verdien i det første argumentet er høyere enn eller lik verdien i det andre argumentet og lavere enn eller lik verdien i det tredje argumentet.
Argumentene til funksjonen kan være både variabler og verdier (alle typer).
Eksempel:
generate var = 1 if inrange(formue, 500000, 1000000)
(inrange-funksjonen = 1 (“true”) dersom 500000 <= formue <= 1000000)
Eksempelet over tilsvarer dette uttrykket:
generate var = 1 if formue >= 500000 & formue <= 1000000
Klikk her for praktisk eksempel på bruk av inlist og inrange.