Transformar variables en SAS. Carácter a numérico

Muchas visitas a este sitio son búsquedas de Google que plantean la problemática que surge al transformar variables caracter a numéricas y viceversa con SAS. Las palabras habituales son “transformar texto a número SAS”, “como paso de variable string a numerica en sas”, “pasar de caracter a fecha en SAS”, “sas transformar fecha numerica en texto”, son todas búsquedas que han generado mucho tiempo de estancia en el sitio a pesar de que no existe un mensaje específico. En el siguiente monográfico vamos a tratar estas conversiones. De esta forma se crearán una serie de dos post que pueden ser un interesante material de consulta para profesionales y estudiantes que trabajen con SAS.

En esta primera entrega vamos a transformar variables de texto en variables numéricas. Como es habitual trabajaremos con ejemplos que podéis ejecutar en vuestras sesiones de SAS para comprobar el funcionamiento. Veamos que posibles casuísticas podemos encontrar:


data uno;
*VARIABLE DE TEXTO SIN SEPARADOR DE MILES CON FORMATO AMERICANO;
 x="4567.89";
*VARIABLE DE TEXTO CON SEPARADOR DE MILES CON FORMATO AMERICANO;
 y="4,567.89";
*VARIABLE DE TEXTO SIN SEPARADOR DE MILES CON FORMATO EUROPEO;
 z="4567,89";
*VARIABLE DE TEXTO SIN SEPARADOR DE MILES CON FORMATO EUROPEO;
 k="4.567,89";
 output;
run;

Estas son las casuísticas más habituales. Formato europeo o americano con o sin separador de miles. Suele ser muy habitual importar una tabla de Access vía fichero de texto y necesitar transformar formatos europeos en formatos americanos que puede leer mejor SAS.

La función “estrella” para esta transformación será INPUT(variable o constante caracter, formato de entrada). Esta función aplica un formato de entrada a una variable o constante caracter. Es muy importante que el formato de entrada exista en SAS. Hay formatos en SAS que pueden ser de salida pero no de entrada. En ocasiones no será necesario emplear la función INPUT, bastará con multiplicar por 1 para transformar en numérico. Así por ejemplo si deseamos transformar las variables anteriores:


data uno;
 set uno;
 x2=x*1;
 y2=input(y,comma16.5);
 z2=tranwrd(z,",",".")*1;
 k2=input(k,commax16.5);
run;

Cuanto tenemos números tipo EEEE.DD basta con multiplicar por 1 para transformar en numérico. Cuando tenemos formatos con separadores de miles tenemos que emplear los formatos de entrada COMMA(X)E.D Y un caso especial es el número EEEE,DD; este caso requiere de transformar con la función TRANWRD(var o cte, “texto a reemplazar”, “texto que reemplaza”) Reemplazamos , por . y solo necesitamos multiplicar por 1.

En la siguiente entrega veremos como transformar variables numéricas a texto. Por supuesto si tenéis dudas, sugerencias o un trabajo muy bien retribuido… rvaquerizo@analisisydecision.es

8 comentarios en “Transformar variables en SAS. Carácter a numérico

  1. Estoy graficando unos datos con linea de tendencia, en el eje x va el periodo (previamente estaba alfanumerico pero lo converti en numerico multiplicando por 1 y es año con mes) al hacer la grafica, este eje sale con intervalos de 50 y muestra datos que no hacen parte de la variable periodo como 201000. Quisiera saber que comando utilizar para que aparezcan todos los periodos como son.

  2. Raul una pequeña pregunta.
    suponte que quieres seleccionar el importe maximo de un determinado grupo de clientes. y luego quieres crear una columna que sea maximo importe que tenga el importe maximo de cada cliente. ¿Como lo harías? Yo lo he hecho con un retain y me crea una variable que va almacenando los valores maximos según vayan cambiando pero si quiero una variable que tenga el valor maximo de cada cliente para poder operar con el no se como hacerlo en sas, en sql tb tengo mis dudas ya que con max tengo que agrupar y pierdo valores cosa que no me interesa. El follon viene que para cada compra de cada cliente me aparezca su importe maximo.

    Muchas gracias

  3. Tengo una duda:
    Tengo una variable caracter que son telefonos.
    Pero en esta variable hay guiones, puntos y comas. Como puedo pasar esta variable a numerica de tal forma que solo coja los numeros??

    muchas gracias, y espero que me resuelvas la duda

  4. CÓMO LE HAGO PARA QUE NO ME TOME MI VARIABLE AÑO COMO UN VALOR?
    POR EJEMPLO, EN LA SIGUIENTE TABLA QUIERO SACAR PROMEDIOS Y DESVIACIONES ESTANDAR POR AÑO,
    1925 1936 1995
    3.16 2.14 1.16
    3.24 1.15 1.13

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *