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!
data test;
input date;
informat date date9.;
format date date9.;
datalines;
31DEC2016
05JAN2017
05APR2017
09JUL2017
10NOV2017
31DEC2017
;
run;
1
DATA 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
;
13
RUN;
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!
proc fcmp outlib=work.cat_function.test;
function DayWeek(DateDay,Language $) $;
/* There is no test if DateDay is a real date.. */
Lg = Language;
nd=WEEKDAY(DateDay);
IF nd = 1
THEN
nd = 7;
ELSE
nd+-1;
length d $ 9;
if Lg='EN' then do;
select (nd);
when (1) d='monday';
when (2) d='tuesday';
when (3) d='wednesday';
when (4) d='thursday';
when (5) d='friday';
when (6) d='saturday';
when (7) d='sunday';
otherwise put 'Not a date !';
end;
end;
else do;
select (nd);
when (1) d='lundi';
when (2) d='mardi';
when (3) d='mercredi';
when (4) d='jeudi';
when (5) d='vendredi';
when (6) d='samedi';
when (7) d='dimanche';
otherwise put 'Not a date !';
end;
end;
return(d);
endsub;
run;
1
PROC 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'THENDO;
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
ELSEDO;
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;
38
RUN;
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!
data test;
set test;
length da da2 $ 9;
format da da2 $9.;
da=DayWeek(date,'FR');
da2=DayWeek(date,'EN');
run;
1
DATA test;
2
SET test;
3
LENGTH da da2 $ 9;
4
FORMAT da da2 $9.;
5
da=DayWeek(date,'FR');
6
da2=DayWeek(date,'EN');
7
RUN;
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!
proc fcmp outlib=work.cat_function.test;
function NumDayWeek(DateDay) $;
/* There is no test if DateDay is a real date.. */
nd=WEEKDAY(DateDay);
IF nd = 1
THEN
nd = 7;
ELSE
nd+-1;
length d $ 1;
d=put(nd,1.);
return(d);
endsub;
run;
1
PROC 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;
14
RUN;
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!
data test;
set test;
length Numday $ 1;
format Numday $1.;
Numday=NumDayWeek(date);
run;
1
DATA test;
2
SET test;
3
LENGTH Numday $ 1;
4
FORMAT Numday $1.;
5
Numday=NumDayWeek(date);
6
RUN;
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
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.