Publicado el :
Macro CREATION_INTERNE

Gestión de conversiones de fechas numéricas con FCMP

Este código también está disponible en: Deutsch English Français
En espera de validación
El script incluye dos funciones FCMP: `DateToNum` convierte una fecha SAS© en un número entero que representa el año, el mes y el día (AAAAMMJJ). `NumToDate` realiza la operación inversa, tomando un número entero AAAAMMJJ y transformándolo en una fecha SAS© válida. Se proporciona un ejemplo concreto para ilustrar su uso en un conjunto de datos ficticio.
Análisis de datos

Type : CREATION_INTERNE


Los datos utilizados para los ejemplos se crean directamente en el script a través de un paso DATA con `datalines`. El conjunto de datos 'test' contiene fechas SAS y sus equivalentes numéricos para demostrar las funciones de conversión.

1 Bloque de código
DATA STEP Data
Explicación :
Este paso DATA crea el conjunto de datos 'test' con dos variables: 'date' (formato de fecha SAS) y 'date2' (formato numérico). Los valores se definen a través de `datalines` para servir como ejemplos de conversión.
¡Copiado!
1DATA test;
2 INPUT date date2;
3 informat date date9.;
4 FORMAT date date9.;
5 DATALINES;
6 31DEC2016 20161231
7 01JAN2017 20170101
8 ;
9RUN;
2 Bloque de código
PROC FCMP
Explicación :
Este bloque `PROC FCMP` compila la función `DateToNum`. Toma una fecha SAS (`DateDay`), extrae el año, el mes y el día, y luego los combina en un único entero en formato AAAAMMJJ (por ejemplo, 20161231 para el 31 de diciembre de 2016).
¡Copiado!
1PROC FCMP outlib=work.cat_function.test;
2 function DateToNum(DateDay);
3 da = day(DateDay);
4 mo = month(DateDay);
5 ye = year(DateDay);
6 res = (ye * 10000) + (mo * 100) + da;
7 return(res);
8 endsub;
9RUN;
3 Bloque de código
PROC FCMP
Explicación :
Este bloque `PROC FCMP` compila la función `NumToDate`. Toma un entero en formato AAAAMMJJ (`DateNum`), deduce el año, el mes y el día, y luego usa la función `mdy` para convertirlo en una fecha SAS estándar.
¡Copiado!
1PROC FCMP outlib=work.cat_function.test;
2 function NumToDate(DateNum);
3 ye = int(DateNum/10000);
4 mo = int(DateNum/100)-(ye*100);
5 da = DateNum - (int(DateNum/100) * 100);
6 res = mdy(mo,da,ye);
7 return(res);
8 endsub;
9RUN;
4 Bloque de código
DATA STEP
Explicación :
Este paso DATA utiliza las funciones `DateToNum` y `NumToDate` compiladas previamente. Crea una nueva variable 'Date2Num' convirtiendo la variable 'date' (fecha SAS) a formato numérico y una variable 'num2date' convirtiendo la variable 'date2' (numérica) a formato de fecha SAS.
¡Copiado!
1DATA test;
2 SET test;
3 FORMAT num2date date9.;
4 Date2Num = DateToNum(date);
5 num2date = NumToDate(date2);
6RUN;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Creation date : 14/04/2017 (fr) Last update : 14/04/2017 (fr) Author(s) : Nicolas DUPONT