En esta segunda parte de funciones presentaremos ejemplos de funciones numéricas. Como es de suponer, comenzaremos viendo algunas de las "clásicas". Esperamos que les sirvan. Pueden acceder al listado completo de funciones de SAS en: https://documentation.sas.com/doc/es/pgmsascdc/9.4_3.5/allprodsle/syntaxByType-function.htm
/************************************************************************/
/* */
/* Funciones de SAS (parte 2) */
/* */
/************************************************************************/
/************************************************************************/
/* */
/* Como en el Tip anterior, vamos a distinguir las funciones según el */
/* tipo de variables a las que se aplican. Entonces tenemos: */
/* 1. Funciones alfanuméricas */
/* 2. Funciones numéricas */
/* 3. Otras funciones */
/* */
/* Dentro de las funciones numéricas podemos ver funciones estadísticas,*/
/* de redondeo y truncamiento, de fecha, y demás. */
/* Dentro del grupo 3 podemos incluir las que modifican el tipo de */
/* variable, las que combinan variables numéricas y alfanuméricas, y */
/* demás. */
/* */
/* Esta es tan sola una de las formas de clasificar las funciones. Lo */
/* hacemos así para poder presentar mejor los ejemplos. */
/* */
/************************************************************************/
/************************************************************************/
/* */
/* Entonces vayamos a los ejemplos de la parte 2 de los Tips de */
/* funciones: las funciones numéricas. */
/* */
/************************************************************************/
/*-------------------*/
/* inicio del código */
/*-------------------*/
/********************************/
/* 2. Funciones numéricas */
/********************************/
/********************************************************/
/* 2.1. Funciones estadísticas (son numéricas, claro) */
/********************************************************/
/* ¡Atención! */
/* Las funciones numéricas de SAS ignoran los valores faltantes o missing. */
/* En el caso de que todos los valores sean faltantes, el resultado será */
/* 'missing'. */
/* El siguiente ejemplo va a ser de utilidad para poder entender el tema */
/* del comportamiento con los valores 'missing'. */
/*--------------------------------------------------*/
/* Ejemplo 2.1: */
/* Funciones SUM, MEAN, MAX, MIN, RANGE, N y NMISS */
/*--------------------------------------------------*/
data ej21_prueba_estad;
infile datalines dsd missover delimiter='\';
input col1 col2 col3 col4;
s1=col1+col2+col3+col4;
s2=sum(col1, col2, col3, col4); /*ignora los valores faltantes (missing)*/
pr1=(col1+col2+col3+col4)/4;
pr2=mean(col1, col2, col3, col4);
pr3=mean(of col1-col4); /*desde la 'col1' a la 'col4'; ¡no olvidarse del 'of'!*/
ma1=max(col1, col2, col3, col4);
ma2=max(of col1--col4); /*todas las variables entre 'col1' y 'col4'*/
mi1=min(col1, col2, col3, col4);
mi2=min(of col:); /*todas las variables que comienzan con 'col'*/
rg1=range(col1, col2, col3, col4); /*es el rango, o sea la diferencia entre el
mayor y el menor valor*/
ene1=n(col1, col2, col3, col4); /* devuelve la cantidad de valores válidos */
miss1=nmiss(col1, col2, col3, col4); /* devuelve la cantidad de valores missing
numéricos */
cards;
1\0\5\9
1\0\-5\9
1\.\5\9
-2\.\.\6
.\.\.\.
;
run;
/************************************************************************/
/* 2.2. Funciones de fecha y de fecha-hora(son numéricas, desde ya) */
/************************************************************************/
/*----------------------------------*/
/* Ejemplo 2.2.1: */
/* Funciones YEAR, MONTH, DAY y QTR */
/*----------------------------------*/
/* Las funciones de fecha tienen como argumento una constante o una variable numérica. */
/* Si este valor no está en formato fecha, va a considerarlo como 'días de SAS' (o sea */
/* considerando 0=1Ene1960, -1=31Dic1959, 1=2Ene1960, etc.). */
/* La función YEAR genera un valor numérico de 4 dígitos que representa el año. */
/* La función MONTH genera un valor numérico entero del 1 al 12 que representa al mes. */
/* La función DAY genera un valor numérico entero del 1 al 31 que representa al día. */
/* La función QTR function devuelve un valor entero del 1 al 4 que representa al */
/* trimestre (quarter). */
data ej221_prueba_fecha;
infile datalines delimiter='!';
input col1 : ddmmyy10. col2 : mmddyy10. col3 : 8.;
format col1 date9. col2 col3 yymmddp10.;
anio1=year(col1);
anio2=year(col2);
anio3=year(col3);
mes1=month(col1);
mes2=month(col2);
mes3=month(col3);
day1=day(col1);
day2=day(col2);
day3=day(col3);
cuatrim1=qtr(col1);
cuatrim2=qtr(col2);
cuatrim3=qtr(col3);
cards;
01/09/2003!11-29-2001!10000
;
run;
/*------------------------------*/
/* Ejemplo 2.2.2: */
/* Función TODAY */
/*------------------------------*/
/* La función TODAY genera la fecha actual como fecha de SAS, que consiste en la */
/* cantidad de días desde el 1 de Enero de 1960. Aunque la función TODAY no tiene */
/* argumentos, se deben incluir los paréntesis (de esa forma SAS distingue las */
/* funciones de las columnas o variables; ¡o de los formatos, que incluyen un punto!). */
/* La función DATE es equivalente a la función TODAY, no tiene argumentos y entrega */
/* el mismo resultado. */
/* ¿Por qué hay 2 funciones que hacen lo mismo? Por la misma razón que mencionamos en el */
/* Tip anterior de funciones: el código SAS funciona desde hace casi 5 décadas, y suelen */
/* aparecer funciones que se solapan con alguna anterior. */
data ej223_prueba_fecha_actual;
fecha_actual01 = today();
fecha_actual02 = today();
format fecha_actual02 ddmmyy10.;
run;
/*----------------------------------*/
/* Ejemplo 2.2.3: */
/* Funciones DATEPART Y TIMEPART */
/*----------------------------------*/
/* Estas dos funciones toman una columna fecha/hora y obtienen la fecha (en el caso de */
/* datepart) o la hora (en el caso de timepart). */
data ej223_prueba_fechahora;
infile datalines delimiter='!';
input col1 : e8601dt. col2 : datetime20. col3 : ymddttm24. col4 : 8.;
format col1 col2 col3 col4 datetime20.
fecha1 fecha2 fecha3 fecha4 date9.
hora1 hora2 hora3 hora4 time8.;
fecha1=datepart(col1);
fecha2=datepart(col2);
fecha3=datepart(col3);
fecha4=datepart(col4);
hora1=timepart(col1);
hora2=timepart(col2);
hora3=timepart(col3);
hora4=timepart(col4);
cards;
2018-11-22T13:15:17!31OCT2021:13:14:15!2001-05-01 17:34:08.5!1234567890
;
run;
/************************************************************************/
/* 2.3. Funciones de redondeo y truncamiento */
/************************************************************************/
/*--------------------------------------*/
/* Ejemplo 2.3.1: */
/* Funciones ROUND, CEIL, FLOOR e INT */
/*--------------------------------------*/
/* La función ROUND redondea, tanto por decimales como por enteros. */
/* La función CEIL aproxima al entero inmediatamente superior. */
/* La función FLOOR aproxima al entero inediatemente inferior. */
/* La función INT obtiene la parte entera de un número. */
data ej23_prueba_redondeo;
infile datalines dsd missover delimiter='\';
input col1 col2 col3 col4;
redond01_1=ROUND(col1);
redond01_2=ROUND(col1,.1); /* aproxima al primer decimal */
redond02_1=ROUND(col2,.1); /* aproxima al primer decimal; como el decimal es '5'
redondea hacia arriba */
redond02_2=ROUND(col2,10); /* aproxima a la decena */
redond04=ROUND(col4,.01); /* aproxima al segundo decimal */
techo01=CEIL(col1);
techo02=CEIL(col2);
techo03=CEIL(col3);
suelo01=FLOOR(col1);
suelo04=FLOOR(col4);
ent01=INT(col1);
ent02=INT(col2);
ent03=INT(col3);
ent04=INT(col4);
cards;
1.3\63.5\-2.9\-5.237
;
run;
/*-------------------*/
/* fin del código */
/*-------------------*/
... View more