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.