top of page
Search

Alder/korrekt århundrede udfra cpr nummer

De fleste, der arbejder med registre eller databaser, står ofte med problemstillingen, at alder er uoplyst, medens cpr-nummer er kendt. Hvordan regner man den ud?

Følgende regel er gældende: Hvis syvende ciffer er 0, 1, 2 eller 3 er man født i det 20. århunderede (1900-tallet) Ligeledes, hvis syvende ciffer er 4 eller 9, og årstallet (femte og sjette ciffer) er større end eller lig 37.

Endelig er man født i det 19. århundrede (1800-tallet) hvis syvende ciffer er 5, 6, 7 eller 8 og årstallet er større end eller lig 58.

Nedenfor finder du eksempel i SAS kode: En lille makro, der udover fødselsdato også udregner køn samt den præcise alder givet datovariabel.


proc format library=work; value gender 0=”Female” 1=”Male” ; run;

%macro agefromCPR(cpr,datevar=inddto,birthvar=birth,agevar=age); dy_temp=input(substrn(&cpr,1,2),2.); mt_temp=input(substrn(&cpr,3,2),2.); yr_temp=input(substrn(&cpr,5,2),2.); lr_temp=input(substrn(&cpr,7,1),1.);

if dy_temp in (61:91) then dy_temp=dy_temp-60;

if yr_temp in (0:99) AND lr_temp in (0:3) then yr_temp=yr_temp+1900; if yr_temp in (0:36) AND lr_temp in (4 9) then yr_temp=yr_temp+2000; if yr_temp in (37:99) AND lr_temp in (4 9) then yr_temp=yr_temp+1900; if yr_temp in (0:57) AND lr_temp in (5:8) then yr_temp=yr_temp+2000; if yr_temp in (58:99) AND lr_temp in (5:8) then yr_temp=yr_temp+1800;

&birthvar=mdy(mt_temp,dy_temp,yr_temp); drop dy_temp mt_temp yr_temp lr_temp; format &birthvar date9.;

format &datevar date9.;

&agevar=INT(INTCK(‘MONTH’, &birthvar, &datevar)/12); if MONTH(&birthvar) = MONTH(&datevar) then &agevar=&agevar -(DAY(&birthvar)>DAY(&datevar)); *age_raw=YRDIF(&birthvar,&datevar,’ACT/ACT’);

gender=mod(input(substrn(&cpr,10,1),1.),2); format gender gender.; %mend;

data tst; input cpr$1-10 +2 date mmddyy10.; DATALINES; 1308445901 04/22/2016 1308761235 04/22/2016 1308760GG1 04/22/2016 1308765490 04/22/2016 1308585499 04/22/2016 1308585EH0 04/22/2016 1308545498 04/22/2016 ; run;

data birth; set tst; %agefromcpr(cpr,datevar=date); run;

4 views0 comments

Recent Posts

See All

dplyr or base R

dplyr and tidyverse are convenient frameworks for data management and technical analytic programming. With more than 25 years of R...

Comments


bottom of page