Dividir en palabras un texto con SAS

Una duda que planteó una lectora del blog acerca de separar una cadena de caracteres separados por comas y crear observaciones en otra variable: ¡Hola! He buscado por toda la página, necesito ayuda urgente. Mi problema es el siguiente: Necesito separar una cadena de texto en una fila en varias filas, por ejemplo: cadena1,cadena2,cadena3 en: cadena1 cadena2 cadena3 Para encontrar la , utilizo scan, aunque podría ocupar anypunct para que encuentre la primera ,, luego la segunda ,, etc., y cortar con substr, length… Pero bueno, ya que tengo un método de separar el texto de la fila, ¿cómo hago para que cada palabra esté en una nueva fila? Ojalá me hayan entendido y me den una idea de cómo hacer eso en un PROC SQL, con una macro o como sea; ¡solo una pequeña orientación me serviría mucho, gracias! ...

12 de septiembre de 2013 · rvaquerizo

Atentos a los intervalos de confianza

Un intervalo de confianza es la zona en la que me fío de lo que estimo. Cuanto más amplia es esa zona menos me fío de lo que estimo, y cuanto más estrecha, más me fío de lo que estimo. Lo que pasa es que un intervalo de confianza, por definición, empieza con la famosa expresión: «dada una población de media $\mu$ y desviación típica $\sigma$…» ¡¡¡FU FU FU FU FU FU!!! ...

26 de julio de 2013 · rvaquerizo

Trucos SAS. Lista de variables missing

Duda que me plantearon ayer por la tarde: dada una serie de variables, determinar qué registro tiene todas esas variables nulas. El truco que planteo puede servir para determinar incluso cuántos valores perdidos tiene esa lista de variables; ese truco me lo reservo para otro día. El código lo acompaño con un ejemplo para que se pueda ejecutar y analizar su funcionamiento: /* GENERAMOS DATOS ALEATORIOS CON MISSING */ data aleatorio; do i = 1 to 20000; aleat1 = sqrt(rannor(45)); aleat2 = sqrt(rannor(5)); aleat3 = sqrt(rannor(4)); aleat4 = sqrt(rannor(450)); aleat5 = sqrt(rannor(40)); output; end; run; /* IDENTIFICAMOS FILAS COMPLETAMENTE NULAS */ data fila_nula; set aleatorio; nulo = 0; array varib(*) aleat1--aleat5; do j = 1 to dim(varib); if not missing(varib(j)) then nulo = 1; end; drop j; if nulo = 0; run; Muy sencillo el truco. Si se encuentra alguna variable que no es nula, la variable nulo ya no toma el valor 0. Espero que os sea de utilidad. Saludos.

8 de marzo de 2013 · rvaquerizo

Truco SAS. Limpiar un fichero de texto con SAS

El otro día me llegó al correo la siguiente cuestión acerca de caracteres extraños en un fichero de texto y la importación a SAS: Tengo un problema a la hora de importar a SAS un fichero .txt. El caso es que tiene en algunos registros el carácter “flechita”. Ejemplo: Calle Paseo de la Castellana “flechita” 60. Cuando lo importo como carácter, para al llegar a la flechita. No sé si podrás ayudarme. Muchas gracias por adelantado. ...

4 de marzo de 2013 · rvaquerizo

Truco SAS. Ver el contenido de un formato

Para ver los valores que toma un formato con SAS, tenemos que emplear el PROC FORMAT. La sintaxis es muy sencilla: proc format library = work.formats fmtlib; select &formato.; run; Tenéis que poner el nombre del formato sin punto. Sintaxis sencilla, pero difícil de recordar (por lo menos a mí me ha pasado). Saludos.

6 de febrero de 2013 · rvaquerizo

Macros SAS. Macro split para partir un conjunto de datos

Debido a problemas con un servidor hace años descubrí la macro Split. Básicamente lo que hace es partir un conjunto de datos SAS en múltiples conjuntos de datos SAS con el mismo número de observaciones, además lo hace en un solo paso data. La forma de particionar el conjunto de datos es muy simple, si alguien tiene dudas con el código que lo comente y lo analizamos mejor. La macro (mejorada) es: ...

22 de enero de 2013 · rvaquerizo

App de SAS para tomar decisiones en base al Big Data

Os presento una app que ha lanzado SAS para emplear el Big Data en la toma de decisiones: https://play.google.com/store/apps/details?id=com.sas.bigdataoverload. Me la ha mandado mi amigo Pepelu. En cuanto pueda me la descargo y comienzo a jugar a ver cómo se me da esto del análisis de grandes volúmenes de información que ahora llaman Big Data e incluso se pueden leer artículos sobre el tema en la prensa más generalista. Con la de años que llevan algunos haciendo esto…

11 de enero de 2013 · rvaquerizo

Macros SAS. Contar las palabras de una macro variable

Una macro de SAS interesante que nos permite ahorrar código. Dada una macro variable necesitamos contar el número de palabras que tiene esta macro variable. Para ello vamos a crear una función con código macro: %let texto = uno dos tres; %macro cuenta(mv); %eval(%sysfunc(length(%cmpres(&mv.),%str( ))) - %length(&mv.) + 1) %mend; %put La Macrovariable Texto tiene %cuenta(&texto.) palabras; Vemos que la macro variable texto tiene tres palabras y necesitamos contabilizarlas para automatizar un código. La propuesta que se plantea es el cálculo de la longitud de la macro sin espacios frente a la longitud de la macro variable con espacios. La diferencia más uno será el número de palabras de nuestro texto. Como aspectos interesantes tenéis el uso de %str( ) , %cmpres y como se juega con %sysfunc para evitar algún que otro problema. Esta macro tiene sus problemas, no pongáis más de dos espacios que la volvéis loca. Pero puede resultar muy útil para determinadas cosas. Saludos.

11 de diciembre de 2012 · rvaquerizo

Parámetro asociado a una Poisson con SAS

Mirad que he visto datos en mi vida. Y esos datos siguen muchas distribuciones. Y una de las distribuciones más habituales con las que me he encontrado es la distribución de Poisson. Esta distribución tiene una característica muy interesante: la varianza es igual que la media. Y si la varianza no es igual a la media tenemos distribuciones de Poisson sobredispersa o Poisson infradispersa con propiedades muy interesantes y que se emplea mucho en el ámbito actuarial, aunque tendremos eventos con una distribución de Poisson cuando estamos hablando de eventos independientes en intervalos de tiempo. ...

15 de noviembre de 2012 · rvaquerizo

La macro iterlist para automatizar código SAS

Impresionante macro de SAS que nos puede ahorrar picar mucho mucho código. La macro se llama iterlist y la he encontrado en este enlace. Es código SAS muy avanzado: %macro iterlist(code =, list =); %*** ASIGNAMOS CADA ELEMENTO DE LA LISTA A UNA MACROVARIABLE INDEXADA &&ITEM&I ; %let i = 1; %do %while (%cmpres(%scan(&list., &i.)) ne ); %let item&i. = %cmpres(%scan(&list., &i.)); %let i = %eval(&i. + 1); %end; %*** GUARDAMOS EL CONTEO TOTAL ; %let cntitem = %eval(&i. - 1); %*** REEMPLAZAMOS EL TOKEN ? CON LOS ELEMENTOS DE LA LISTA ; %do i = 1 %to &cntitem.; %let codeprp = %qsysfunc(tranwrd(&code., ?, %nrstr(&&item&i..))); %unquote(&codeprp.) %end; %mend iterlist; El funcionamiento es muy complejo; destacaría el uso de %qsysfunc. El caso es que nos permite pasar listas de código. Imaginemos que tenemos que hacer la siguiente tarea: ...

17 de octubre de 2012 · rvaquerizo