Publicado el :
Función CREATION_INTERNE

Creación de funciones personalizadas para los días de la semana

Este código también está disponible en: Deutsch English Français
En espera de validación
El script comienza creando un conjunto de datos de prueba que contiene algunas fechas. Luego utiliza el procedimiento PROC FCMP para compilar y almacenar dos funciones personalizadas en el catálogo `work.cat_function`. La primera función, `DayWeek`, devuelve el nombre del día de la semana (en francés o inglés) para una fecha dada. La segunda función, `NumDayWeek`, devuelve el número del día de la semana (donde 1 = Lunes). Estas funciones son luego probadas y aplicadas al conjunto de datos `test`.
Análisis de datos

Type : CREATION_INTERNE


Los datos utilizados para la prueba se generan directamente en el script a través de un paso DATA usando la instrucción DATALINES.

1 Bloque de código
DATA STEP Data
Explicación :
Creación de una tabla SAS temporal llamada 'test' que contiene una variable 'date' alimentada por datos brutos (datalines) para probar las funciones.
¡Copiado!
1DATA test;
2 INPUT date;
3 informat date date9.;
4 FORMAT date date9.;
5 DATALINES;
6 31DEC2016
7 05JAN2017
8 05APR2017
9 09JUL2017
10 10NOV2017
11 31DEC2017
12 ;
13RUN;
2 Bloque de código
PROC FCMP
Explicación :
Definición de la función personalizada 'DayWeek' que toma una fecha y un código de idioma ('EN' u otro para FR) y devuelve el nombre del día. La función se compila en el paquete 'work.cat_function.test'. Ajusta el resultado de WEEKDAY para que el Lunes sea el día 1.
¡Copiado!
1PROC FCMP outlib=work.cat_function.test;
2 function DayWeek(DateDay,Language $) $;
3 /* There is no test if DateDay is a real date.. */
4 Lg = Language;
5 nd=WEEKDAY(DateDay);
6 IF nd = 1
7 THEN
8 nd = 7;
9 ELSE
10 nd+-1;
11 LENGTH d $ 9;
12 IF Lg='EN' THEN DO;
13 select (nd);
14 when (1) d='monday';
15 when (2) d='tuesday';
16 when (3) d='wednesday';
17 when (4) d='thursday';
18 when (5) d='friday';
19 when (6) d='saturday';
20 when (7) d='sunday';
21 otherwise put 'Not a date !';
22 END;
23 END;
24 ELSE DO;
25 select (nd);
26 when (1) d='lundi';
27 when (2) d='mardi';
28 when (3) d='mercredi';
29 when (4) d='jeudi';
30 when (5) d='vendredi';
31 when (6) d='samedi';
32 when (7) d='dimanche';
33 otherwise put 'Not a date !';
34 END;
35 END;
36 return(d);
37 endsub;
38RUN;
3 Bloque de código
DATA STEP Data
Explicación :
Aplicación de la función 'DayWeek' a la tabla 'test'. Crea dos nuevas columnas 'da' (francés) y 'da2' (inglés). Nota: Para que esto funcione sin opciones globales, la sesión SAS debe conocer la ubicación de las funciones CMPLIB, aunque la opción 'cmplib' no esté explícitamente definida aquí, a menudo es necesaria.
¡Copiado!
1DATA test;
2 SET test;
3 LENGTH da da2 $ 9;
4 FORMAT da da2 $9.;
5 da=DayWeek(date,'FR');
6 da2=DayWeek(date,'EN');
7RUN;
4 Bloque de código
PROC FCMP
Explicación :
Definición de la segunda función personalizada 'NumDayWeek'. Devuelve el número del día como una cadena de caracteres, con Lunes = 1 y Domingo = 7.
¡Copiado!
1PROC FCMP outlib=work.cat_function.test;
2 function NumDayWeek(DateDay) $;
3 /* There is no test if DateDay is a real date.. */
4 nd=WEEKDAY(DateDay);
5 IF nd = 1
6 THEN
7 nd = 7;
8 ELSE
9 nd+-1;
10 LENGTH d $ 1;
11 d=put(nd,1.);
12 return(d);
13 endsub;
14RUN;
5 Bloque de código
DATA STEP Data
Explicación :
Aplicación de la función 'NumDayWeek' a la tabla 'test' para crear la columna 'Numday'.
¡Copiado!
1DATA test;
2 SET test;
3 LENGTH Numday $ 1;
4 FORMAT Numday $1.;
5 Numday=NumDayWeek(date);
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 : Author(s) : Nicolas DUPONT - Creation date : 14/04/2017