Join Now

Ændre årstallet i en datetime variabel

by Occasional Contributor PeterKellberg on ‎10-26-2016 05:49 AM (168 Views)

Hvis du vil frem- eller tilbageskrive årstallet i en datetime variabel, så kan du bruge INTNX-funktionen. Du skal bare huske DT foran intervalnavnet - altså DTYEAR i stedet for YEAR. Hvis du ændre årstallet til et specifikt år, er opskriften mere "kringlet" - i hver fald den løsning, jeg lige kunne ryste ud af ærmet ;-) Er der mon en enklere opskrift?

 

 

 

data test;
   date=datetime();

   /* INTNX kan fx rykke året frem eller tilbage 
      Man bruger intervalnavne med DT foran */
   date_1=INTNX("DTYEAR",date,1,"SAME");

   /* Hvis man vil ændre til et specifikt år, så gør man det på denne måde 
      Strategien er at splitte datetime variablen op i date,timer,minutter, sekunder, så man kan samle
      det igen med DHMS-funktionen. Date-delen splittes så yderligere op i måned, dag og år, som vi
      samler sammen til en date med MDY-funktionen.
      */
   date_2=DHMS(MDY(MONTH(DATEPART(date)),DAY(DATEPART(date)),1998),HOUR(date),MINUTE(date),SECOND(date));

   format date date_1 date_2 datetime24.4;
run;

Comments
by SAS Employee GeorgMorsing
on ‎10-26-2016 11:32 AM

Hej,

 

Jeg har skrevet to linjer som gør det samme og beregner date_3. Om det er mere enkelt ved jeg ikke.

 

data test;

date=datetime();

/* INTNX kan fx rykke året frem eller tilbage

Man bruger intervalnavne med DT foran */

date_1=INTNX("DTYEAR",date,1,"SAME");

antal=1998 - year(datepart(date));

date_3=INTNX("DTYEAR",date,antal,"SAME");

/* Hvis man vil ændre til et specifikt år, så gør man det på denne måde

Strategien er at splitte datetime variablen op i date,timer,minutter, sekunder, så man kan samle

det igen med DHMS-funktionen. Date-delen splittes så yderligere op i måned, dag og år, som vi

samler sammen til en date med MDY-funktionen.

*/

date_2=DHMS(MDY(MONTH(DATEPART(date)),DAY(DATEPART(date)),1998),HOUR(date),MINUTE(date),SECOND(date));

format date date_1 date_2 date_3 datetime24.4;

run;