Skip to content

Instantly share code, notes, and snippets.

@rudvfaden
Last active July 13, 2021 12:30
Show Gist options
  • Save rudvfaden/354909cfbfa83646a453319e3fb5cb5e to your computer and use it in GitHub Desktop.
Save rudvfaden/354909cfbfa83646a453319e3fb5cb5e to your computer and use it in GitHub Desktop.
Create date dimension table
%let _output=DimDato;
proc datasets lib=work nolist;
delete &_output;
run;
data workspde.&_output;
length
DatoKey 8
dato 8
DagIUge 3
DagIMåned 3
DagIÅr 6
DagNavnUge $7
DagNavnUgeKort $4
HverdagFlag 3
Ugenr 3
UgeStartDato 8
UgeSlutDato 8
Måned 3
MånedsNavn $9
MånedsNavnKort $4
Kvartal 3
År 6
ÅrUge $7
Årmåned $7
ÅrKvartal $7
OffsetDato 6
OffsetUge 6
OffsetMåned 6
OffsetÅr 6
FortidFremtidFlag 3
MånedSlutFlag 3
;
StartDato=intnx('year',today(),-6,'B');
Slutdato=intnx('year',today(),3,'E');
do dato=StartDato to Slutdato;
DagIUge=weekday(dato)-1+(weekday(dato)=1)*7;
DagIMåned=day(dato);
DagIÅr=dato - intnx('year',dato,0)+1;
DagNavnUge=NLDATE(dato,'%A');
DagNavnUgeKort=NLDATE(dato,'%a');
if DagIUge<6 then
HverdagFlag=1;
else HverdagFlag=0;
År=year(dato);
Måned=month(dato);
ÅrMåned=catx('-',år,put(måned,z2.));
Kvartal=qtr(dato);
ÅrKvartal=catx('-',år,put(Kvartal,z2.));
UgeNr=week(dato,'v');
ÅrUge=catx('-',år,put(UgeNr,z2.));
UgeStartDato = intnx('week',dato,0,'b');
UgeSlutDato = intnx('week',dato,0,'e');
MånedsNavn=NLDATE(dato,'%B');
MånedsNavnKort=NLDATE(dato,'%b');
DatoKey=input(cats(år,put(måned,z2.),put(dagIMåned,z2.)),8.);
OffsetDato = intck('day',today(),dato);
OffsetUge = intck('week',today(),dato);
OffsetMåned = intck('month',today(),dato);
OffsetÅr = intck('year',today(),dato);
if dato = intnx('month',dato,0,'e') then
MånedSlutFlag=1;
else MånedSlutFlag=0;
if dato<today() then
FortidFremtidFlag=-1;
else if dato>today() then
FortidFremtidFlag=1;
else FortidFremtidFlag=0;
output;
end;
format dato UgeStartDato UgeSlutDato date9.;
drop startdato slutdato;
run;
data workspde.&_output;
set workspde.&_output;
by år UgeNr;
if first.år then
RankÅr+1;
if first.UgeNr then
RankUge+1;
run;
data workspde.&_output;
set workspde.&_output;
by år måned;
if first.måned then
RankMåned+1;
Opdateringsdato=datetime();
format Opdateringsdato datetime20.;
run;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment