Registerreference

Variabelnavne for de hyppigst brugte DST-registre

Published

June 6, 2026

Warning

For DARTER: Tjek hvornår cleaned-data sidst blev opdateret, inden du kører pipeline.

Registrene i cleaned-data/ er ikke nødvendigvis opdateret til i dag. Tjek modificeringsdato på DST-serveren:

file.info("E:/workdata/[projektnummer]/cleaned-data/parquet-registers/")$mtime

Overvej: hvornår går din follow-up til, og er registrene opdateret frem til den dato? Forældet udtræk afskærer censureringsdatoer og udfald for tidligt — ingen fejlmeddelelse, bare stille forkerte resultater. Hvis registrene ikke dækker din studieperiode, skal du bestille et nyt udtræk hos DST.

Alle kolonnenavne på denne side er bekræftet på DST 2026-05-15 via colnames(). De vises efter rename_with(tolower) er kaldt. Nøglekolonner — dem du faktisk bruger i koden — er markeret med fed.

Note

Åbning af registre — to veje: Kodeeksemplerne på denne side bruger open_dataset("sti/til/register/") som generisk placeholder — erstat med stien til dit projekts parquet-mappe. DARTER-brugere kan bruge load_database("registernavn") — se DARTER — Registersti og datastores.

Se Faldgruber for særlige quirks ect. ved hvert register. Kolonnenavne gælder efter rename_with(tolower) — inspicér dit eget register med colnames() hvis noget ikke stemmer.

Tip

Leder du efter “hvilket register indeholder X?” — start med beslutningstabellen i Fase 8 — Kend dine registre. Denne side er den dybe reference med fulde kolonnenavne, typer og kodeeksempler.


Oversigt — alle registre

Register Registernavn Join-nøgle Periode Kritisk kolonne
BEF "bef" pnr Alle år koen, foed_dag, familie_id
DODSAARS "dodsaars" pnr Se projektvejledning d_dodsdto (dødsdato til censurering)
VNDS "vnds" pnr Alle år indud_kode, haend_dato
LPR2 kontakter "lpr_adm" recnum Frem til marts 2019 d_inddto, c_pattype
LPR2 diagnoser "lpr_diag" recnum Frem til marts 2019 c_diag, c_diagtype
LPR2 SKS-procedurer "lpr_sksopr" recnum Frem til 2018 c_opr, d_odto
LPR2 psyk kontakter "t_psyk_adm" k_recnumrecnum 1995–marts 2019 v_cprpnr
LPR2 psyk diagnoser "t_psyk_diag" v_recnumrecnum 1995–marts 2019 c_diag, c_diagtype
LPR3 kontakter "lpr_a_kontakt" dw_ek_kontakt Marts 2019+ kont_starttidspunkt (datetime)
LPR3 diagnoser "lpr_a_diagnose" dw_ek_kontakt Marts 2019+ diag_kode, diag_kode_type, senere_afkraeftet
LPR3 SKS-procedurer "procedurer_kirurgi" dw_ek_forloeb 2019+ procedurekode, dato_start
LMDB "lmdb" pnr Ca. 1994+ atc, eksd
UDDA "udda" pnr Alle år hfaudd, aar
FAIK "faik" familie_id Alle år famaekvivadisp_13
AKM "akm" pnr Alle år socio13, aar
Projekt-specifikke registre Se projektvejledning pnr Varierer DARTER: se registersti →

1. Demografi og dødsfald

BEF — Befolkningsregistret

Statusregister — ét snapshot per person per referencetidspunkt (ultimo perioden). Leveres kvartalsvist siden 2008 (marts, juni, september, december); før 2008 kun december. At aar == 2020 svarer til et bestemt referencetidspunkt afhænger af projektkonventionen — bekræft i din projektvejledning. En person der dør i løbet af 2020 optræder stadig i 2020-snapshottet — brug DODSAARS til at afgøre om en person var i live på en specifik dato.

Kolonne Type Indhold
pnr character Personidentifikator
koen numeric Køn: 1 = mand, 2 = kvinde
foed_dag Date Fødselsdato
aar integer Registerår (én post per år)
familie_id character Husstandsnøgle — join til FAIK
reg character Region
civst character Civilstand
Note

BEF indeholder ikke dødsdato. Brug DODSAARS (d_dodsdto) til censurering. Se DST’s officielle BEF-dokumentation: statistikdokumentation/befolkningen →


DODSAARS — Dødsregistret

Én række per afdød person.

Note

Dækningsperiode og tilgængelighed afhænger af dit projekts cleaned-data. Tjek modificeringsdato og spørg din datamanager om aktuel dækning.

Kolonne Type Indhold
pnr character Personidentifikator
d_dodsdto Date Dødsdato — brug denne til censurering
fdato Date Fødselsdato
c_sex character Køn
v_alder numeric Alder ved dødsfald
year integer Dødsår
c_dod1 character Underliggende dødsårsag (ICD-10)
c_dod2c_dod4 character Medvirkende dødsårsager
c_dodskom character Dødsmåde/-sted
c_bopkom character Bopælskommune ved dødsfald
Warning

dodsaasg er klassifikationsregistret for dødsårsager — det er ikke kilden til individuelle dødsdatoer. Brug altid dodsaars med kolonnen d_dodsdto.


VNDS — Migrationsregistret

Én række per migrationsbegivenhed per person.

Kolonne Type Indhold
pnr character Personidentifikator
indud_kode character "U" = udvandring (brug til censurering), "I" = indvandring
haend_dato Date Begivenhedsdato

Brug: filter(indud_kode == "U")min(haend_dato) per pnr for første udvandringsdato. Ikke-udvandrere optræder ikke i VNDS med en “U”-hændelse og får emigration_date = NA.


2. LPR2 — Somatisk (frem til marts 2019)

Join: lpr_adm LEFT JOIN lpr_diag ON recnum.

lpr_adm — Kontakter

Kolonne Type Indhold
recnum character Kontaktnøgle — join til lpr_diag
pnr character Personidentifikator
d_inddto Date Indlæggelsesdato — brug som kontaktdato
c_pattype character Kontakttype: "0" = indlagt, "1" = ambulant, "2" = skadestue
d_uddto Date Udskrivningsdato
c_adiag character Aktionsdiagnose (kopi — brug lpr_diag via join i stedet)
c_spec character Specialekode
year integer År

lpr_diag — Diagnoser

Kolonne Type Indhold
recnum character Join-nøgle til lpr_adm
c_diag character ICD-10-kode med D-præfiks (f.eks. "DG30") — brug substr(c_diag, 2, 4)
c_diagtype character "A" = aktionsdiagnose, "B" = bidiagnose, "G" = grundmorbus
c_diagmod character Diagnosemodifikator
year integer År

3. LPR2 — Psykiatrisk (1995 – marts 2019)

Psykiatriske kontakter før marts 2019 er i separate registre fra somatisk LPR2. Fra marts 2019 dækker LPR3 begge i én tabel.

Warning

Glemmer du at forespørge de psykiatriske registre for perioden 1995–2019, misser du alle demensdiagnoser (F00–F03) stillet på geropsykiatriske ambulatorier og hukommelsesklinikker. De patienter vil fremstå demensfrie og forblive i kohorten som falske negativer.

t_psyk_adm — Psykiatriske kontakter

Kolonnenavne afviger fra somatisk LPR2 — omdøb ved load:

psyk_adm <- open_dataset("sti/til/t_psyk_adm/") %>%
  rename_with(tolower) %>%
  rename(pnr = v_cpr, recnum = k_recnum)
Rå kolonnenavn Efter rename Type Indhold
v_cpr pnr character Personidentifikator
k_recnum recnum character Kontaktnøgle — join til t_psyk_diag
d_inddto (uændret) Date Kontaktdato — samme som lpr_adm
c_pattype (uændret) character Kontakttype

t_psyk_diag — Psykiatriske diagnoser

psyk_diag <- open_dataset("sti/til/t_psyk_diag/") %>%
  rename_with(tolower) %>%
  rename(recnum = v_recnum)
Rå kolonnenavn Efter rename Type Indhold
v_recnum recnum character Join-nøgle til t_psyk_adm
c_diag (uændret) character ICD-10 med D-præfiks — brug substr(c_diag, 2, 4)
c_diagtype (uændret) character "A" / "B" / "G" — samme som lpr_diag

4. LPR3 (marts 2019 og frem)

LPR3 dækker både somatiske og psykiatriske kontakter i én tabel. Join: lpr_a_kontakt LEFT JOIN lpr_a_diagnose ON dw_ek_kontakt.

Note

“a” i lpr_a_diagnose betyder ikke A-type diagnoser. Det refererer til analysemodel-betegnelsen for LPR3-serien (LPR_A, introduceret 2025). Tabellen indeholder alle typer: A, B og G — du skal stadig filtrere på diag_kode_type.

lpr_a_kontakt — Kontakter

Kolonne Type Indhold
pnr character Personidentifikator
dw_ek_kontakt character Kontaktnøgle — join til lpr_a_diagnose
kont_starttidspunkt datetime Kontaktstarttidspunkt — konverter med as.Date()
kont_type character Kontakttype: "ALCA00" = indlagt
kont_sluttidspunkt datetime Kontaktsluttidspunkt
kont_ans_hovedspec character Specialekode
borger_doedsdato Date Dødsdato (kopi fra CPR)
borger_foedselsdato Date Fødselsdato (kopi fra CPR)
borger_koen character Køn (kopi fra CPR)
year integer År
Alle bekræftede kolonner i lpr_a_kontakt

pnr, dw_ek_kontakt, kont_starttidspunkt, kont_sluttidspunkt, kont_type, kont_type_tekst, kont_patient_type, kont_patient_type_tekst, kont_ans_hovedspec, kont_ans_hovedspec_shak, kont_ans_inst, kont_ans, kont_ans_geo_reg, kont_ans_geo_reg_tekst, kont_ans_org_reg, kont_ans_org_reg_tekst, borger_doedsdato, borger_foedselsdato, borger_koen, borger_alder_aar_ind, borger_alder_aar_ud, borger_bo_kom, borger_bo_kom_tekst, borger_bo_reg, borger_bo_reg_tekst, dw_sk_sygehusophold, dw_ek_helbredsforloeb, dw_ek_forloeb, dw_ek_borger, adiag, adiag_tekst, beh_starttidspunkt, flag_kont_afsluttet, kont_aarsag, kont_aarsag_tekst, kont_indb_tidspunkt, kont_fir_kode, kont_fir_tekst, kont_fritvalg, kont_fritvalg_tekst, kont_henv_aarsag, kont_henv_aarsag_tekst, kont_henv_instans, kont_henv_maade, kont_henv_maade_tekst, kont_henv_tidspunkt, kont_inst_ejertype, lprindberetningssystem, prioritet, prioritet_tekst, kont_lpr_entity_id, cprtjek, cprtype, year

lpr_a_diagnose — Diagnoser

Kolonne Type Indhold
dw_ek_kontakt character Join-nøgle til lpr_a_kontakt
diag_kode character ICD-10 med D-præfiks (f.eks. "DG30") — brug substr(diag_kode, 2, 4)
diag_kode_type character "A" = aktionsdiagnose, "B" = bidiagnose, "G" = grundmorbus
senere_afkraeftet character "Ja" = tilbagekaldt (ekskluder), "Nej" = bekræftet, NA = ikke registreret
diag_kode_tekst character ICD-10-kodetekst
diag_parent_kode character Overordnet diagnosekode
year integer År

Standardfilter for senere_afkraeftet:

filter(is.na(senere_afkraeftet) | senere_afkraeftet != "Ja")

5. LPR — SKS-procedurekoder

SKS (Sundhedsvæsenets Klassifikations System) er det danske klassifikationssystem for operationer og procedurer — svarende til NOMESCO-koderne brugt i de øvrige nordiske lande. Bariatrisk kirurgi har f.eks. koderne KJDF10 (RYGB) og KJDF40 (sleeve gastrektomi).

SKS-koder er splittet over to registre afhængigt af periode. Til en fuld dækning skal begge forespørges og resultatet bindes sammen.

Note

Ingen pnr i proceduretabellerne. pnr hentes via join til henholdsvis lpr_adm (LPR2) eller lpr_a_kontakt (LPR3).

lpr_sksopr — LPR2 SKS-procedurer (frem til 2018)

Placering: parquet-registers/lpr_sksopr

lpr_sksopr <- open_dataset("sti/til/lpr_sksopr/") %>%
  rename_with(tolower)
Kolonne Type Indhold
recnum character Join-nøgle til lpr_adm
c_opr character SKS-procedurekode — brug denne til matching (f.eks. "KJDF10")
d_odto Date Operationsdato
c_oprart character Procedureart-kode
c_osgh character Opererende sygehus
c_tilopr character Supplerende procedurekode
year integer År (partitionskolonne)

procedurer_kirurgi — LPR3 SKS-procedurer (2019 og frem)

Placering: parquet-external/procedurer_kirurgi

proc_kirurgi <- open_dataset("sti/til/procedurer_kirurgi/") %>%
  rename_with(tolower)
Kolonne (efter tolower) Type Indhold
dw_ek_forloeb character Join-nøgle til lpr_a_kontakt — brug denne til pnr-opslag
dw_ek_kontakt character NA for alle rækker i denne parquet-fil på DARTER — brug dw_ek_forloeb i stedet
procedurekode character SKS-procedurekode — brug denne til matching (f.eks. "KJDF10")
dato_start Date Proceduredato
proceduretype character "P" = procedure, "+" = add-on kode
procedurekode_parent character Overordnet procedurekode
proceduretype_parent character Overordnet proceduretype
tidspunkt_start datetime Proceduretidspunkt
dato_slut Date Procedureslutdato
tidspunkt_slut datetime Proceduresluttidspunkt
lprindberetningssystem character LPR-indberetningssystem
sorenhed_pro character SOR-enhed for proceduren
procedureregistrering_id character Internt registrerings-ID
Warning

dw_ek_kontakt er NA for alle rækker i DARTER’s parquet-version af procedurer_kirurgi (bekræftet 2026-06-02). Join til lpr_a_kontakt via dw_ek_forloeb for at hente pnr. Gælder DARTER/projekt 708421 — tjek på dit eget projekt. Kolonnenavnene er blandet store/små bogstaver i rådata — kald rename_with(tolower) umiddelbart efter load.

Kombination over hele perioden

# Erstat [projektnummer] med dit eget projektnummer
# DARTER: brug load_database("registernavn") i stedet for open_dataset("sti")

# SKS fra LPR2 (frem til 2018)
opr_lpr2 <- open_dataset("sti/til/lpr_sksopr/") %>%
  rename_with(tolower) %>%
  filter(toupper(c_opr) %in% !!SKS_KODER) %>%   # !! sender den lokale R-vektor til DuckDB
  left_join(
    open_dataset("sti/til/lpr_adm/") %>%
      rename_with(tolower) %>%
      select(recnum, pnr, d_inddto),
    by = "recnum"
  ) %>%
  select(pnr, opr_dato = d_odto, opr_kode = c_opr) %>%
  collect()

# SKS fra LPR3 (2019 og frem) — join via dw_ek_forloeb
opr_lpr3 <- open_dataset("sti/til/procedurer_kirurgi/") %>%
  rename_with(tolower) %>%
  filter(toupper(procedurekode) %in% !!SKS_KODER) %>%   # !! sender den lokale R-vektor til DuckDB
  left_join(
    open_dataset("sti/til/lpr_a_kontakt/") %>%
      rename_with(tolower) %>%
      select(dw_ek_forloeb, pnr),
    by = "dw_ek_forloeb"
  ) %>%
  select(pnr, opr_dato = dato_start, opr_kode = procedurekode) %>%
  collect()

# Samlet
opr_alle <- bind_rows(opr_lpr2, opr_lpr3)

6. LMDB — Lægemiddelstatistikregistret

Én række per ekspederet recept. Dækker ca. 1994 og frem.

Kolonne Type Indhold
pnr character Personidentifikator
atc character Fuld ATC-kode (f.eks. "N06D01")
eksd Date Ekspeditionsdato — brug som receptdato
atc1atc4 character ATC-niveauer 1–4
indo character Indikationskode
vnr character Varenummer
apk numeric Pakningsstørrelse
aldr numeric Alder ved ekspedition
year integer Ekspeditionsår
Alle bekræftede kolonner i LMDB

pnr, eksd, ekst, atc, atc1, atc2, atc3, atc4, indo, vnr, apk, aldr, bald, eksp, korr, rinr, name, streng, packtext, volume, voltypecode, voltypetxt, dosform, strnum, strunit, packsize, cprtjek, cprtype, year, etid, ovnr, patt, doso, reca, abc


7. Socioøkonomiske registre

Alle tre registre bruges til SEP-udtræk i 03_extract_ses.R efter SEPLINE-retningslinjerne (Hjorth et al. 2025). Ingen samlet SEP-variabel beregnes — tre separate dimensioner.

UDDA — Uddannelsesregistret

Én post per person per år — opdateres, når uddannelsesniveauet ændrer sig.

Kolonne Type Indhold
pnr character Personidentifikator
hfaudd character ISCED-uddannelseskode (f.eks. "35" = erhvervsuddannelse)
aar integer Registerår

Kategorisering (SEPLINE): substr(as.character(hfaudd), 1, 2)"10"/"15" = kort, "20""35" = mellemlang, "40""80" = lang, "90" = ukendt.


FAIK — Familieindkomst

Husstandsækvivaleret disponibel indkomst per år. Link: join BEF (pnr, familie_id, aar) med FAIK (familie_id, aar).

Kolonne Type Indhold
familie_id character Husstandsnøgle — join til BEF
famaekvivadisp_13 numeric Husstandsækvivaleret disponibel indkomst
aar integer Registerår

Indkomstkvintiler beregnes som 3-årsgennemsnit sammenlignet med Q20/Q40/Q60/Q80-grænseværdier fra den fulde BEF-population stratificeret på køn × 5-årsaldersgruppe × referenceår.


AKM — Arbejdsklassifikationsmodulet

Arbejdsmarkedsstatus per person per år.

Kolonne Type Indhold
pnr character Personidentifikator
socio13 numeric Beskæftigelseskode
aar integer Registerår

SEPLINE-kategorisering af socio13: - Beskæftiget: 110–114, 120, 131–135, 139 - Studerende: 310 - Ledig: 210, 410 - Udenfor arbejdsmarkedet: 220, 321, 330 - Pensionist: 322, 323 - Ukendt: 0, 420 eller manglende


8. Projekt-specifikke registre

Mange projekter har adgang til registre ud over standardlisten ovenfor — fx kvalitetsregistre fra kliniske databaser eller færdigberegnede klassifikationsfiler.

Disse er projekt-specifikke og ikke tilgængelige i alle projekter på DST.

Tip

Arbejder du på DARTER / projekt 708421? Projektet bruger bl.a. DBSO (Databasen for Behandling af Svær Overvægt) og OSDC (Open Source Diabetes Classifier).

Back to top