Truco SAS. Macro número de días de un año
Macro de SAS que te dice el número de días que tiene un año: %macro dias_anio(anio); ("31DEC&anio."d - "01JAN&anio."d + 1) %mend; A lo mejor ya la he puesto; no me lo tengáis en cuenta. Saludos.
Macro de SAS que te dice el número de días que tiene un año: %macro dias_anio(anio); ("31DEC&anio."d - "01JAN&anio."d + 1) %mend; A lo mejor ya la he puesto; no me lo tengáis en cuenta. Saludos.
Macro de SAS fácil y rápida que nos permite saber el número de días que tiene el mes de una fecha de SAS. La tenía para la automatización de un código que con una media y daba guerra cuando se trataba de un año bisiesto. 3 líneas de código: %macro dias(fec); ((&fec-day(&fec)+1)+31-day((&fec-day(&fec)+1)+31))-(&fec-day(&fec)) %mend; El razonamiento es sencillo. Se trata de poner a día 1 la fecha que le pasamos, irnos un mes después y hacer la diferencia. Por supuesto copiáis y pegáis el ejemplo en el editor: ...
Un post de BIOSTATMATT que nos conduce a un código in R que nos permite leer datasets de SAS directamente con R sin necesidad de tener SAS. Un problema recurrente que abordaré con más detenimiento otro día [ahora me voy a pescar]. Aquí tenéis el enlace: http://biostatmatt.com/archives/1216 Solo tenéis que cargar la función read.sas7bdat que tenéis in este enlace. Y ya podéis leer conjuntos de datos SAS. Ejemplo: source("http://biostatmatt.com/R/sas7bdat.R") datos <- read.sas7bdat("D:\\raul\\Trabajo\\salida\\p03.sas7bdat") De momento lo he probado in conjuntos de datos SAS sin índices y sin comprimir; si encuentro algún problema, primero se lo reporto a la gente que ha creado esta función y más tarde os lo comento. Saludos.
Esta duda me llegó hace unos días. Se trataba de ejecutar un código si existía determinado fichero o determinada tabla. Para hacer esto, os planteo una posible metodología que yo utilizaba cuando programaba SAS en una gran entidad bancaria con Enterprise Guide 1; por aquel entonces hacía maravillas con la “castaña” del Guide v1. Entre ellas, unas macros que contenían una sentencia condicional que ejecutaba un código en función de la función (bonita expresión) EXIST o FILEEXIST. Lo que yo hacía era algo parecido a esto: ...
Puede resultarnos útil tener todos los archivos de un directorio en una tabla de Excel. Si estamos documentando un proceso, si nos dan un gran número de ficheros y tenemos que realizar procesos repetitivos sobre ellos, si queremos tener inventariados nuestros programas… Para esto os planteo una macro bien sencilla que recorre un directorio y nos escribe los elementos que encuentra en él. El código Visual Basic para la macro en Excel no puede ser más sencillo: ...
El otro día Fernando comentó que los cruces de tablas más rápidos entre tablas grandes y tablas pequeñas son las sentencias condicionales sobre listas. Tiene razón. Es una práctica muy habitual en SAS cuando leemos tablas de Oracle la realización de listas; ésto derivará en otro truco SAS en breves días. El caso es que me gustaría que probarais este código: * CONJUNTO DE DATOS GRANDE; data grande; do i = 1 to 20000000; idcliente = int(ranuni(0) * 1000000); output; end; drop i; run; * CONJUNTO DE DATOS PEQUEÑO, SIN DUPLICADOS; data pequenio; do i = 1 to 2000000; idcliente = int(ranuni(34) * 1000000); if mod(idcliente, 1132) = 0 then output; end; drop i; run; proc sort data=pequenio nodupkey; by idcliente; run; * CREAMOS LA LISTA EN UNA MACROVARIABLE; proc sql noprint; select idcliente into :lista separated by " " from pequenio; quit; * CRUCE MEDIANTE SENTENCIA IN; data machea5; set grande; if idcliente in (&lista.); run; Bueno, el tiempo de ejecución de este cruce de tablas es de unos pocos segundos. Mejora a las soluciones planteadas el otro día y, sobre todo, es un código fácil, muy fácil. Se trata de crear listas de macrovariables y realizar un paso DATA con una sentencia condicional. ...
Cuando manejamos datos, las fechas nos producen muchos quebraderos de cabeza; por ejemplo, cuando tenemos que transformar un carácter a fecha. En mi opinión, R es una de las herramientas más flexibles y rápidas para trabajar con fechas (claro que, acostumbrado a SAS, cualquier otra herramienta me parece perfecta). A lo que vamos, imaginemos la siguiente situación: # ?as.Date x <- c("1jan1960", "2jan1960", "31mar1960", "30jul1960") z <- as.Date(x, "%d%b%Y") z # [1] NA NA "1960-03-31" "1960-07-30" Se trata de transformar un texto a fecha en R. El formato del texto es día, mes en inglés y año con cuatro cifras. Para transformar a fecha tenemos la función as.Date, que recibe como parámetros el objeto y el formato de la fecha (el más habitual sería %d/%m/%Y para 10/09/1976). Para meses en formato nombre empleamos %b, pero en este caso "1jan1960" nos produce un valor perdido; sin embargo, "31mar1960" sí se transforma correctamente. ¿Por qué motivo sucede esto? ...
Quería plantear hoy un truco Excel que no es un truco como tal, sino más bien una idea para que podáis hacer más vistosos vuestros informes con gráficos de caracteres, sobre todo para aquellos dinosaurios que hagáis muchos rankings o puntuaciones. La idea es muy sencilla: se trata de emplear la función REPETIR de Excel pero «con talento». =REPETIR("|"; E12) nos repite el pipe | tantas veces como le indiquemos en la casilla E12. Pero hay algo que sí tiene importancia: la fuente que elijamos para el pipe: ...
Buscando algunas cosas sobre R, he encontrado esta función que hice hace mucho tiempo. De hecho, puedo decir que es de las primeras que hice, allá por 2001 (creo), cuando empecé a conocer esto de R. Por aquel entonces aseguré que el futuro pasaba por R y, nueve años después, sigo diciendo lo mismo; el tiempo me dará la razón; lo que no me imaginaba es que hiciera falta tanto tiempo. En fin, historias del dinosaurio. ...
Con R hay veces que no podemos acceder a internet desde nuestro trabajo. Esto es porque el puerto 80 suele estar cerrado por motivos de seguridad. Sin embargo, el puerto 8080 es más habitual dejarlo abierto. Para conectar R con internet y facilitar la descarga de paquetes, la conexión con Yahoo Finance, Bloomberg… podemos hacer lo siguiente: buscar el Rgui.exe en nuestro equipo y, a la hora de ejecutarlo, poner la opción --internet2. Con ello hacemos que R se conecte a internet con el puerto 8080. Por ejemplo, en Windows sería: ...