Macros SAS. Hacer 0 los valores missing de un dataset

La siguiente macro de SAS nos permite transformar los valores perdidos (missing) en valor 0 para todas las variables de un dataset. Para todas, para todas las numéricas. Esto es muy importante porque en ocasiones es necesario distinguir el valor 0 del valor missing (.). Pero puede ser muy práctica si vamos a emplear procedimientos que han de distinguir valores perdidos o, simplemente, si deseamos que nuestra tabla tenga otro aspecto. ...

27 de noviembre de 2008 · rvaquerizo

Truco Excel. Nuestra propia función redondear en Excel

Hay operaciones que pueden ser muy habituales de hacer con Excel y para las que necesitaríamos una función propia que las realizara. A continuación, vamos a plantear una situación en la que es especialmente útil crear una función específica y guardarla en el libro de macros personal para utilizarla en nuestras sesiones. En este caso concreto, vamos a crear una función que nos redondee un número a 0 o 0,5; es decir, 6,3 valdría 6 y 6,7 valdría 6,5. Para realizarlo sin una función específica emplearíamos múltiples funciones de Excel, por ejemplo: ...

21 de noviembre de 2008 · rvaquerizo

Macros SAS. Ordenar alfabéticamente las variables de un dataset

Si deseamos ordenar alfabéticamente las variables de un conjunto de datos SAS para facilitar la realización de sumatorios masivos (importes, saldos…) y el dataset está desordenado, os planteo una macro sencilla que trabaja con una de las vistas más útiles de SASHELP. La macro permite establecer qué variables deseamos que aparezcan primero, selecciona el resto de nombres, los ordena alfabéticamente y, mediante un PROC APPEND (más rápido que un paso DATA), crea el fichero SAS con las variables ordenadas: ...

6 de noviembre de 2008 · rvaquerizo

Trucos SAS. Operar con fechas YYYYMM típicas de particiones Oracle

Este truco va orientado a programadores SAS que estén habituados a trabajar con Oracle. El SAS Tip de hoy nos permite parametrizar a la perfección la lectura de tablas históricas particionadas. En estos casos, podemos crear parámetros con macrovariables de SAS para leer las tablas Oracle sin necesidad de modificar manualmente las fechas de partición. Un ejemplo Sin parametrizar: proc sql; create table maximo as select idcliente, max(importe) as importe_semestral from ora.tabla where f_particion in (200801, 200806, 200812); quit; Parametrizado: proc sql; create table maximo as select idcliente, max(importe) as importe_semestral from ora.tabla where f_particion in (&mes_menos_6., &mes., &mes_mas_6.); quit; Con este ejemplo queda claro nuestro objetivo. En el siguiente paso DATA veremos las funciones que vamos a emplear para trabajar con fechas de partición AAAAMM (las más habituales): ...

1 de octubre de 2008 · rvaquerizo

Truco SAS. Transformaciones de variables con arrays

Hacer ceros los missing en un dataset. Crear una etiqueta "NO DISPONIBLE" en campos carácter sin valores. Cuando trabajamos con SAS, es una situación más que habitual. A continuación voy a plantear un par de ejemplos de cómo podemos usar array de variables en SAS para realizar una transformación “masiva” de variables de nuestro conjunto de datos. Poner missing numéricos a 0 Lo primero es destacar que no siempre un valor perdido equivale a 0. Cuando realizamos modelos, es necesario tener en cuenta qué hacemos con los missing; el siguiente ejemplo transforma todos los . de un dataset a 0: ...

18 de septiembre de 2008 · rvaquerizo

Truco SAS. Proc contents que genera un dataset

Vamos a introducir los nombres de las variables SAS de un dataset en otro dataset. Esto puede sernos muy útil para realizar documentación, validaciones de los conjuntos de datos generados, automatización de instrucciones… Es un truco muy sencillo y tan sólo es necesario comprender el funcionamiento del ODS de SAS, explicado en otro de los mensajes de este blog. Simplemente empleamos el PROC CONTENTS de SAS y almacenamos con ODS en un dataset el resultado del listado de las variables: ...

26 de agosto de 2008 · rvaquerizo

Truco Excel. Obtener cambio de divisas on-line

El siguiente truco de Excel es muy sencillo. Se trata de una consulta web que nos permite obtener el cambio de divisas a euro casi prácticamente on-line. La consulta se realiza sobre la web www.finanzas.com, sitio que además quiero recomendar; desde él sigo la imparable caída de mis valores… La consulta es la siguiente: Sub cambio_divisas() ' Cambiamos la configuración regional temporalmente With Application .DecimalSeparator = "." .ThousandsSeparator = "," .UseSystemSeparators = False End With ' Realizamos la consulta web With ActiveSheet.QueryTables.Add(Connection:= _ "URL;http://www.finanzas.com/divisas", Destination:=Range("A1")) .Name = "divisas_1" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "1" .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = False .Refresh BackgroundQuery:=False End With ' Restablecemos la configuración regional del sistema With Application .UseSystemSeparators = True End With End Sub Primero cambiamos los separadores de miles y decimales; posteriormente realizamos la consulta a www.finanzas.com/divisas y ya tenemos tabulada la información. Además, no sobrescribimos anteriores consultas; siempre se añadirán gracias a RefreshStyle, por lo que podemos hacer un seguimiento del cambio. Me ha sido muy útil para seguir el efecto del precio de unos fondos de inversión. Saludos.

17 de julio de 2008 · rvaquerizo

Truco SAS. Uso de filename y pipe

Hoy presento una de las utilidades de FILENAME para interactuar con los file systems en los que creamos tablas SAS. Consiste en emplear FILENAME con la opción PIPE. Lo que hacemos es asignar una referencia a una ejecución del sistema operativo. Por ejemplo, en Windows: filename dir_pipe pipe "dir c:\"; data uno; infile dir_pipe; input datos $char50.; run; Creamos una tabla SAS temporal que contiene el resultado de la ejecución en MS-DOS de dir c:\; muy simple. Pero donde de verdad puede sernos de utilidad el uso de PIPE es en ejecuciones con UNIX. A continuación, planteo algunos ejemplos: ...

17 de julio de 2008 · rvaquerizo

Trucos Excel. Crear un borrador de correo con Excel

Inicio una serie de mensajes con trucos de Excel que considero pueden ser de utilidad para realizar tareas habituales en nuestro trabajo diario. Este primer truco Excel consiste en una macro que nos permite crear en borradores correos electrónicos. También nos permitiría enviarlos directamente, pero en ese caso habríamos de tener permisos para que otras aplicaciones accedieran a Outlook. Veamos el código que emplea: Sub Correo() Dim ol As Object, myItem As Object Dim adjunto As String Set ol = CreateObject("Outlook.Application") Set myItem = ol.CreateItem(olMailItem) adjunto = "C:\temp\fichero.xls" With myItem .Subject = "Título del correo" .Body = "Cuerpo del mensaje" .To = "rvaquerizo@analisisydecision.es" .Attachments.Add adjunto, 1, 500 .Close (olSave) '.Send 'Si tenemos permisos para enviar correos End With Set ol = Nothing End Sub Creamos un objeto Outlook y a ese objeto le añadimos título, cuerpo, destinatario, un archivo adjunto de C:\temp y lo guardamos como borrador; si tenemos los suficientes permisos, podremos enviarlos con .Send. Como os podéis imaginar, ésta es la versión menos sofisticada de la macro y a ella podemos añadir bucles, búsquedas… Espero que pueda seros de utilidad. Por supuesto, si no funciona o tenéis dudas: rvaquerizo@analisisydecision.es.

7 de julio de 2008 · rvaquerizo

Truco SAS. Categorizar variables continuas

Si necesitamos crear grupos a partir de una variable continua, podemos emplear una metodología muy sencilla para crear muestras proporcionales o muestras de un tamaño predeterminado a partir de un conjunto de datos SAS. El método de cálculo es bien sencillo: si deseamos crear $N$ grupos, dividimos la observación entre el total y multiplicamos por los $N$ grupos, redondeando al entero más alto. Si deseamos grupos de tamaño $M$, dividimos la observación entre $M$ redondeando al entero más alto. En código SAS: ...

5 de junio de 2008 · rvaquerizo