Ayudadme. Importar a SAS texto con comillas

Hoy sois vosotros los que tenéis que ayudar al dinosaurio. Ya no estoy para estas cosas. Tengo un problema. Fichero de texto separado por ; típico csv de toda la vida. Este fichero de texto contiene diversos campos que a mis efectos son de texto. Si abrimos el fichero con una hoja de cálculo tendríamos: Pues bien, a la hora de importar unos datos con esa estructura desde SAS no soy capaz de que Dato2 siga conservando las comillas. Con IMPORT tampoco me funciona. El código sería algo parecido a esto: ...

17 de enero de 2013 · rvaquerizo

Intervalos en SAS con PROC FORMAT

El uso de formatos en SAS para la creación de intervalos puede ahorrarnos tanto escritura de código como espacio en nuestros conjuntos de datos SAS. Una vez que nos familiaricemos con ellos evitaremos la creación de sentencias IF anidadas y generar nuevas variables de texto de gran longitud en nuestro dataset. Sin embargo siempre me plantean la misma cuestión, ¿por dónde están cerrados los intervalos en un formato? Hoy vamos a generar una serie de ejemplos para analizar este tema. Partimos de un conjunto de datos aleatorio con una variable de poisson con media 18: ...

21 de diciembre de 2012 · rvaquerizo

Truco SAS. Un vistazo a ficheros planos muy grandes

Alguna vez no habéis podido abrir un fichero de texto muy grande para comprobar si tiene cabeceras o conocer el separador de campos. Es habitual emplear para esto el gran UltraEdit. Pero podemos emplear el PROC FSLIST de SAS para poder hacer esta tarea y se nos abrirá de inmediato una vista del fichero en una ventana de nuestra sesión SAS. La sintaxis muy sencilla: ```sas proc fslist fileref="Z:\temp\archivo_enorme.txt"; quit; Este sencillo código nos abrirá las primeras líneas del archivo en un instante y así podremos comprobar si tiene cabeceras o el separador que utiliza. Esto nos facilitaría la importación del fichero a tabla SAS. Saludos.

20 de agosto de 2012 · rvaquerizo

Test de Levene con SAS

El Test de Levene se aplica para la igualdad de varianzas. Es un análisis de la varianza de las desviaciones de los valores muestrales respecto a una medida de tenedencia central. Parte de la hipótesis nula de igualdad de varianzas. Para realizar este test en SAS emplearemos el PROC GLM en combinación con la opción HOVtest. En la línea habitual vemos un ejemplo: data datos; input presion @@; if _n_<=5 then grupo=1; else if _n_<=10 then grupo=2; else if _n_<=15 then grupo=3; else if _n_<=20 then grupo=4; else grupo=5; cards; 180 172 163 158 147 173 158 170 146 152 175 167 158 160 143 182 160 162 171 155 181 175 170 155 160 ; run; Proc GLM Data=datos ; Class grupo; Model presion = grupo; Means grupo/HOVTest; ODS select HOVFTest; Quit; Vemos que se trata de un código sencillo donde modelizamos con GLM la variable dependiente con la variable grupo y en MEANS indicamos con HOVtest que deseamos que se realice el test de Levene, con ODS seleccionamos sólo esa salida. Este código podemos parametrizarlo y crear una macro que nos permita replicar el código: ...

7 de mayo de 2012 · rvaquerizo

En la regresión logística ¿el sobremuestreo es lo mismo que asignar pesos a las observaciones?

Hoy vamos a volver sobre el tema del sobremuestreo. Respondemos a un lector, Roberto, que hace mucho tiempo planteó una duda al respecto. La duda se puede resumir: En un modelo logístico, ¿equivale entrenar un modelo con las observaciones sobremuestreadas a entrenar el modelo poniendo un peso a cada observación? Esta cuestión nunca me la había planteado. Siempre había realizado un sobremuestreo de las observaciones adecuando la población de casos negativos a la población de casos positivos. Si estás habituado a trabajar con Enterprise Miner de SAS es habitual asignar pesos a las observaciones para realizar el proceso de sobremuestreo. ¿Obtendremos distintos resultados? ...

26 de marzo de 2012 · rvaquerizo

Trucos SAS. Trasponer con SQL para torpes

Trasponer datos con SAS es un tema que genera un gran número de consultas en Google, por lo tanto genera un gran número de visitas a este blog. Ya hay un monográfico al respecto pero hoy quería volver a contar la trasposición de datos con SQL y SAS pero a un nivel más bajo para que sea lo más sencillo posible. En el ejemplo partimos de una tabla con 3 variables, un id_cliente, un campo tipo y un campo precio. Cada tipo tiene un precio y necesitamos que nuestro dataset tenga un registro por id_cliente y 3 precios, uno por cada tipo. El ejemplo en código SAS: ...

21 de noviembre de 2011 · rvaquerizo

Trucos SAS. La ventana LOG vacía o limpia

Duda que me trasmitieron hace tiempo. Necesito que no se genere salida en el log porque se llena y mi proceso da problemas. Con el PROC PRINTTO podemos hacer que nuestros procesos no generen salida en la ventana log. Para ello sólo tenemos que utilizar el siguiente código: proc printto log='null'; quit; Si deseamos volver a tener resultados en la ventana log sólo tenemos que hacer: proc printto log=log; quit; Con el PROC PRINTTO no sólo podemos dirigir el log a un fichero, también podemos dirigir el OUTPUT con la opción PRINT. Tenéis muchos ejemplos en la red acerca de este tema. Para limpiar el log también podemos emplear la instrucción DM: ...

28 de junio de 2011 · rvaquerizo

Macros (fáciles) de SAS. Eliminar outliers en una variable

Hace tiempo ya os propuse una chapuza para eliminar outliers de forma multivariante. Por supuesto quedabaeliminar outliers en una variable. Recortar los valores extremos en aquellas variables cuantitativas que deseemos. Para ello os propongo una macro que no considero muy compleja y que os analisisaré con mayor detalle, pero lo primero la macro al completo: %macro elimina_outliers( varib, /*VARIABLE PARA ELIMINAR EL OUTLIER*/ entrada,/*DATASET DE ENTRADA*/ salida, /*DATASET DE SALIDA, PUEDE SER EL MISMO DE ENTRADA*/ corte_inferior, /*% DE CORTE INFERIOR*/ corte_superior);/*% DE CORTE SUPERIOR*/ *******************************************************************; *CREAMOS LOS PERCENTILES; data _null_; call symput ("lim1",compress(0+&corte_inferior.)); call symput ("lim2",compress(100-&corte_superior.)); run; *PREPARAMOS MV CON LOS NOMBRES QUE OBTENDREMOS DEL PROC UNIVARIATE; data _null_; call symput ('nom_lim1',compress("P_"||tranwrd("&lim1.",'.','_'))); call symput ('nom_lim2',compress("P_"||tranwrd("&lim2.",'.','_'))); run; *EL UNIVARIATE GENERA UNA SALIDA SOLO CON LOS PERCENTILES DESEADOS; proc univariate data=&entrada. noprint; var &varib.; output out=sal pctlpre=P_ pctlpts=&lim1.,&lim2.; quit; *CREAMOS MV CON LOS CORTES DESEADOS; data _null_; set sal; call symput("inf",&nom_lim1.); call symput("sup",&nom_lim2.); run; *REALIZAMOS EL FILTRO; data &salida.; set &entrada.; if &varib.>&inf. and &varib.<&sup.; run; proc delete data=sal;run; %mend; Su ejemplo de uso correspondiente: ...

16 de mayo de 2011 · rvaquerizo

Trucos SAS. Validación de consultas con PROC SQL

Hay ocasiones en las que lanzamos consultas a las BBDD con SAS y necesitamos saber si son correctas. Quería plantearos un truco SAS para PROC SQL que valida las consultas antes de ser ejecutadas. Empiezo el truco en la línea habitual, creo un dataset de ejemplo y os presento como realizar la validación, de este modo vosotros podéis copiar y pegar el código en una sesión de SAS y comprobar su funcionamiento. Datos aleatorios de partida: ...

6 de abril de 2011 · rvaquerizo

Laboratorio de código SAS. Ordenaciones con HASH vs. PROC SORT

Hace pocas fechas vimos el código SAS empleado para la realización de ordenaciones de conjuntos de datos SAS mediante algoritmos de hash. Ya os comuniqué que era una forma más eficiente y hoy quería demostraros tal eficiencia con un laboratorio de código SAS. La situación es la siguiente, creamos un dataset con 1.000.000 de registros, 13 variables y comparamos un PROC SORT con una ordenación mediante hash, medimos tiempos y podemos determinar qué forma de ordenación es más eficiente. ...

15 de noviembre de 2010 · rvaquerizo