sábado, 21 de julio de 2018

Declaración IF-THEN / ELSE


Sintaxis
IF expresión THEN declaración ; Declaración
< ELSE ;>


Donde:

expresión: Es cualquier expresión SAS y es un argumento requerido.
declaración: Puede ser cualquier declaración SAS ejecutable o grupo DO.


SAS evalúa la expresión en una instrucción IF-THEN para producir un resultado que es distinto de cero, cero o faltante. Un resultado distinto de cero y sin pérdida causa que la expresión sea verdadera; un resultado de cero o faltante hace que la expresión sea falsa.

Si se cumplen las condiciones que se especifican en la cláusula IF, la instrucción IF-THEN ejecuta una declaración SAS para observaciones que se leen de un conjunto de datos SAS, para registros en un archivo externo o para valores calculados. 

Una instrucción ELSE opcional proporciona una acción alternativa si la cláusula THEN no se ejecuta. La declaración ELSE, si se utiliza, debe seguir inmediatamente la instrucción IF-THEN.

El uso de sentencias IF-THEN sin la instrucción ELSE hace que SAS evalúe todas las sentencias IF-THEN. 



Diferencia entre la instruccion  IF vs Where 



Las personas que trabajamos con el lenguaje SAS muchas veces nos preguntamos que es mas rápido cuando de filtrar datos se trata.  

En SAS Enterprise Guide existen las palabras reservadas  IFWhere. De manera sencilla vamos a explicar como funciona cada una de ellas


WHERE 

Se determinan cuando se compila el paso DATA . A medida que se ejecuta el paso DATA, los datos entrantes solo filtran a aquellos registros que coinciden con la condición WHERE, por lo que solo esos registros se cargan en el vector de datos del programa (PDV). Esto da como resultado menos iteraciones a través del código del paso DATA, pero no brinda la oportunidad de tomar decisiones "dinámicas" sobre qué registros examinar.


IF 
La instrucción IF se evalúa en tiempo de ejecución y opera sobre las variables una vez que ya están en el PDV. Cuando se cumple la condición IF, la observación actual se mantiene para salida eventual. A diferencia de la instrucción WHERE, la instrucción IF puede examinar los valores de las nuevas variables que se definen dentro del paso.

viernes, 7 de agosto de 2015

Trasformado variables numéricas a carácter


Algo con lo que siempre nos enfrentamos cuando programamos en SAS es al casting de valores numéricos a carácter o de carácter a numéricos, en SAS EG  existen funciones  que nos permiten hacer este tipo de conversiones:

INPUT = Carácter a numérico

Mi_variable = input (variable_cadea, formato );

PUT =  Numérico a carácter

mi_variable = put(variable_numerica, formato);

sábado, 1 de agosto de 2015

El uso del IFC y IFN


Estas funciones  SAS son sentencias de control que permiten  evaluar condiciones como el IF.. THEN, y devuelven un valor como resultado después de evaluar la condición

IFC = El valor que devuelve la función después de evaluar las condicional debe ser estrictamente una cadena de caracteres

IFN =  El valor que devuelve la función después de evaluar las condicional debe ser estrictamente una valor numérico


Sintaxis

IFC ( <condicion>,  <si se cumple>, <si no se cumple >)

Ejemplo:

data  ejemplo;
length estatus $10.;
do i=1 to 10;
edad= i;
end;
estatus= ifc ( i<=6, "aprobado", "reprobado")
run;

La salida es la siguiente

edad|marca
1 |reprobado
2 |reprobado
3 |reprobado
4 |reprobado
5 |reprobado
6 |reprobado
7 |aprobado
8 |aprobado
9 |aprobado
10 |aprobado

Como calcular la edad en SAS


Obtener una diferencia en años entre ellas es un tema baladí. Ejecutad el siguiente código SAS para calcular la diferencia en años:

data uno;
   format fecha1 ddmmyy10.;
     do fecha1= 9000 to today();
      output;
    end;
run;

data uno;
set uno;
   format fecha2 ddmmyy10.;
   fecha2="15MAY2014"d;

  edad = int((fecha2-fecha1)/365.25);
  if month(fecha1)=5 and day(fecha1)=15;
run;
Visualizad el conjunto de datos uno, la serie de edad asusta 28,28,27,25,24,24,… Está claro que algo falla. Hace ya tiempo que hablamos de ello en este mismo blog. Los ceros y los unos con los que guardan estas máquinas las cosas a veces nos juegan estas malas pasadas. Para evitar este problema os sugiero que empleéis la función de SAS YRDIF con la base ‘AGE’. Replicamos el ejemplo:

data uno;
  format fecha1 ddmmyy10.;
   do fecha1= 9000 to today();
  output;
   end;
run;

data uno;
 set uno;
 format fecha2 ddmmyy10.;
 fecha2="15MAY2014"d;
 edad = int(yrdif(fecha1,fecha2,'AGE'));
run;

data uno;
 set uno;
 if month(fecha1)=5 and day(fecha1)=15;
run;


Uso del MERGE en SAS

A continuación se presentan los diferentes tipos de union de Tablas en SAS,


sábado, 11 de julio de 2015

Uso del DATALINES

Como utilizar el  DATALINES
Se pueden dar diferentes usos a este tipo de sentencia en SAS, desde la lectura de algunas líneas en SAS que pueden ser interpretadas como datos de entrada que asu vez estarán contenidos en un Data Set.
Uso
Es recomendable utilizar el DATALINES  siempre con una sentencia INPUT para poder dar lectura a los datos que se introducen directamente en la sentencia DATALINES  en sustitución de un archivo o una tabla SAS.
Siempre que utilicemos el  DATALINES como sentencia para la lectura de datos es necesario terminar con una sentencia  puto y coma  “;” para indicar el fin de la lectura de los datos
 
 

Ahora mostraremos un ejemplo de lectura de datos pero con la opción INFILE  de SAS, esta opción permite la entrada de datos de algún archivo de datos, en este caso el DATALINES funciona como un archivo de texto.