Convertir de número a fecha cuando hay ceros

En algunas ocasiones nos encontramos que en una tabla los campos de fecha aparecen en numérico y llevan los valores no informados rellenados con un 0. O sea, hay un 0 en vez de un nulo. En este artículo quiero ofreceros algunas opciones para convertir rápidamente estos números en un formato fecha de SAS tradicional, de forma que podamos operar normalmente con ellos. Veremos ejemplos cuando el campo de origen es de texto, o es numérico.

En primer lugar, una tabla para los ejemplos que van abajo:

data EJEMPLO;
fecha_inicio = 20220101;
fecha_fin = 20220331;
output;
fecha_inicio = 20220101;
fecha_fin = 0;
run;

Formato número YYYYMMDD a fecha


data FECHAS1;
    set EJEMPLO;
    format fc_inicio ddmmyyn8.;
    if fecha_inicio = 0 then fc_inicio = .;
    else fc_inicio = mdy(mod(floor(fecha_inicio/100),100),mod(fecha_inicio,100),floor(fecha_inicio/10000));
run;

Formato número DDMMYYYY a fecha


data FECHAS2;
    set EJEMPLO;
    format fc_fin ddmmyys10.;
    if fecha_fin = 0 then fc_fin = .;
    else fc_fin = mdy(mod(floor(fecha_fin/10000),100),floor(fecha_fin/1000000),mod(fecha_fin,10000));
run;

Convertir mes YYYYMM a fecha

A veces tienes un dato de fecha expresado como mes. El problema para crear una fecha a partir de él es que no conocemos el día, así que hay que asumir que nos valdría o el primer o el último día del mes. La forma de convertirlo es así:


data FECHAS3;
    mes = 202208;
    format fc_mes_1 fc_mes_2 ddmmyys10.;
    /* primer día del mes */
    fc_mes_1 = mdy(mod(mes,100),1,floor(mes/100));
    /* último día del mes */
    fc_mes_2 = intnx('month',mdy(mod(mes,100),1,floor(mes/100)),0,'e');
run;

Para saber algo más de los tipos de formato de fecha que puedes utilizar visita este link.

SAS Guide: Ejecutar código al conectarse

En ocasiones utilizamos repetidas veces las mismas definiciones de librerías que no están predeterminadas por el administrador en el sistema o tenemos que cargar ciertas macros que utilizamos repetidamente en nuestros distintos programas. Este trabajo de repetir estos trozos de código a veces puede resultar pesado e incluso comerse parte de nuestro preciado tiempo.

Una forma para realizar esta tarea de forma automática cada vez que se inicia SAS Guide es utilizando el autoexec. Este es un fichero que contiene un trozo de código que se ejecutará al inicio de la sesión y que es exclusivo de cada usuario, por lo que podemos personalizarlo a nuestro gusto.

Podemos editar este autoexec desde las opciones de SAS Guide. Para ello, primero crearemos el programa que contiene el código que necesitamos ejecutar y lo guardaremos preferiblemente en una ruta de red donde otros usuarios puedan alcanzarlo para que puedan utilizar nuestro código. No es nada recomendable guardarlo en una carpeta personal si se trabaja en un equipo.

Una vez hecho esto, en el menú de SAS Guide vamos al menú Herraminetas > Opciones > Programas SAS y hacemos check en la opción «Procesar el código SAS cuando el servidor esté conectado». Esto ejecutará el siguiente código cuando se realice una conexión al workspace. De esta forma, las librerías o macros que creemos estarán disponibles nada más abrir SAS y podrán ser llamadas desde cualquier programa que ejecutemos nosotros.

Menú de Opciones de SAS Guide

Para editar el código que se ejecutará en ese momento haremos clic en el botón Editar. Aparecerá una ventana de código donde incluiremos la llamada al código que nos interese. En este caso recomiendo incluir un include que llame al programa SAS que ya habíamos generado. Para ello, escribimos:

%include «[ruta]\[nombre_programa.sas]»;

Donde ruta es la ruta completa de la carpeta donde se encuentra el código y nombre_programa.sas el nombre del programa que se ha creado.

Cualquier otro usuario que ejecute un programa que contenga estas librerías o macros que hemos definido aquí; o en caso de planificar un programa, no los tendrán disponibles por defecto, ya que este cambio solo afecta a tu propia sesión. Pero esto se arregla fácilmente incluyendo la misma línea del %include que antes hemos visto al principio de ese programa y todo funcionará correctamente.

Google Sheets: Convertir bitcoins a euros

Hay unas 10.000 criptomonedas, pero se puede conocer la cotización de las principales con Google Sheets.
Para ello debemos utilizar la función GOOGLEFINANCE. Esta función permite convertir la cotización de varios tipos de activos financieros (acciones, criptomonedas, etc.) a varias divisas con una actualización frecuente.

Su sintaxis general es la siguiente:
GOOGLEFINANCE(ticker, [attribute], [start_date], [end_date|num_days], [interval])
El «ticker» es el tipo y nombre de divisa, acción o criptomoneda de la que se quiere conocer su valor. Ese parámetro va entrecomillado y se indica con el nombre del índice bursátil y el del ticker separados por dos puntos. Se puede buscar el nombre de los índices bursátiles y los tickers disponibles en esta web.

En el caso de las criptomonedas se usa "Currency:AAAXXX". AAA será la divisa (euro, dólar, etc.) o la criptomoneda desde la que queramos convertir y XXX será la de destino. Pongo algunos ejemplos:

=GOOGLEFINANCE("Currency:BTCEUR") Para convertir de Bitcoins a euros. Multiplicado este valor por el número de bitcoins que tienes, te dará su valor actual.
=GOOGLEFINANCE("Currency:BTCUSD") Para convertir de Bitcoins a dólares.
=GOOGLEFINANCE("Currency:ETHEUR") Para convertir de Etherium a euros.
=GOOGLEFINANCE("Currency:EURETH") Para convertir de euros a Etherium.
=GOOGLEFINANCE("Currency:ADAEUR") Para convertir de Etherium a euros.
=GOOGLEFINANCE("Currency:BTCMXN") Para convertir de Bitcoins a pesos mexicanos.
=GOOGLEFINANCE("Currency:ETHPEN") Para convertir de Etherium a soles peruanos.

Existe un listado de ejemplos con todas las criptomonedas disponibles aquí: https://www.google.com/finance/markets/cryptocurrencies?hl=es

En el siguiente enlace de Google tienes la descripción completa de la función: https://support.google.com/docs/answer/3093281?hl=es