Trucos

Truco SAS. Identificar el proceso en Unix con SYSJOBID

Un truco SAS muy rápido y que a algún compañero le ha venido muy bien y por eso lo pongo. La macro variable & sysjobid nos idenfica el job de Unix que está corriendo en ese momento. Es una macro del sistema y se haya en el diccionario de macros de SAS. Tenemos una vista en SASHELP VMACRO de cuales son estas macros AUTOMATIC. Curiosead SASHELP, tiene algunas vistas muy interesantes, creo que ya he comentado algo sonbre ellas.

Trucos SAS. Eliminar etiquetas en los conjunto de datos SAS

Hoy planteo un ejemplo de uso de las vistas de SASHELP con los nombres de las columnas de una tabla SAS. Además sirve para conocer mejor el PROC DATASETS y la creación de macro variables con el PROC SQL. Una macro que no es de mucha utilidad pero con la que podemos empezar a aproximarnos al lenguage macro de SAS:

%macro sinetiquetas(conj);

data _null_;

if index("&conj.",".")=0 then x="WORK";

else x=substr("&conj.",1,index("&conj.",".")+1) ;

call symput('libreria',x);

y=substr("&conj.",index("&conj.",".")+1,length("&conj.")) ;

call symput('tabla',y);

proc sql noprint;

select compress(name||"=''") into:l1 separated by " "

from sashelp.vcolumn

where libname=upcase("&libreria.") and memname=upcase("&tabla.") ;

quit;

proc datasets lib=&libreria. nolist;

modify &tabla.;

label &l1.;

quit;

%mend;

Primero buscamos con un paso data si es una tabla temporal o permanente. Creamos una macro variable con los nombres de las variables preparadas para eliminar etiquetas (var1=»). Las etiquetas las quitamos con DATASETS y MODIFY. La macro sólo necesita como parámetro la tabla sobre la que deseamos eliminar las etiquetas. A pesar de ser un truco fácil seguro que más de uno se precompila esta macro en sus sesiones SAS.

Trucos SAS. Muestreo con PROC SURVEYSELECT

Hace varios días planteamos algún truco SAS para la realización de muestras aleatorias. Hoy planteo otro truco para lo mismo pero empleando el procedimiento de SAS SURVEYSELECT. Este procedimiento lo tenemos en el módulo STAT y tiene una sintaxis muy sencilla. Además nos permite realizar muestreos estratificados de forma muy sencilla, mediante pasos data el muestreo estratificado se complica. Como es habitual vemos varios ejemplos partiendo de una tabla SAS aleatoria:

Muestreo de datos con R

Recientemente, hubo una entrada en este blog sobre cómo realizar muestreos aleatorios en tablas SAS. En ésta vamos a ver cómo se procedería con R.

Consideraremos el conjunto de datos iris —de dimensión 150 x 5— y extraeremos 60 filas con distintos procedimientos.

Para el muestreo aleatorio simple sin repetición , basta con hacer:

indices <- sample( 1:nrow( iris ), 60 )

iris.muestreado <- iris[ indices, ]

Para relizar un muestreo aleatorio simple con repetición , basta con sustituir la variable indices anterior por

Trucos SAS. Pasar de caracter a numérico y viceversa

Llega un gran número de visitas a AyD buscando como transformar en SAS variables caracter a numéricas y viceversa. Pero estas visitas están muy poco tiempo y me he planteado que los mensajes que hay dedicados al uso de PUT e INPUT no son claros. Por este motivo planteo un truco SAS de transformación de variables muy corto y concreto. Como es habitual lo vemos con ejemplos:

Transformar de caracter a numérico:

Trucos Excel. Eliminar referencias del tipo IMPORTARDATOSDINAMICOS

A la hora de referenciar en Excel celdas de tablas dinámicas es muy molesto encontrarnos con referencias del tipo « +IMPORTARDATOSDINAMICOS(«CLIENTES»; F3;»POTENCIAL»;2)» El importardatosdinamicos puede resultarnos muy molesto para trabajar con fórmulas que normalmente arrastramos. Para evitar este problema hemos de colocar en la barra de herramientas el botón «Generar GetPivotData». Esto lo hacemos ubicándonos en una barra de herramientas y con el botón derecho nos vamos a Personalizar y entre los botones de datos tenemos el Generar GetPivotData, como vemos en la figura adjunta. Lo seleccionamos y lo pulsamos cuando deseemos no tener la dichosa fórmula del importardatosdinamicos y podemos hacer fórmulas más habituales.

Trucos SAS. Muestras aleatorias con y sin reemplazamiento

Un ejemplo típico de SAS pero que creo que puede ayudar a conocer algunas funciones de SAS. Los ejemplos que planteo a continuación crean un dataset con 10.000 observaciones y sobre él vamos a crear dos subconjuntos de datos, dos muestras aleatorias del dataset de partida, una muestra sin reemplazamiento y otra muestra con reemplazamiento. Son dos ejemplos muy sencillos. Como siempre creo un dataset de forma aleatoria que me sirve de base para plantearos el truco:

Trucos R. Leer de Excel vía RODBC

Un gran número de visitas que llegan a este sitio tienen que ver con la importación de datos. En este caso he encontrado en Youtube un video explicativo en el que nos indican de una forma muy sencilla como importar a R datos desde hojas Excel con el paquete RODBC:

Imagen de previsualización de YouTube

«Very easy». Uno de mis siguientes proyectos es realizar videos de este tipo, bajo mi punto de vista son muy prácticos e ilustrativos.

Trucos SAS. Variables dummy de una variable continua

Dumificar es crear variables dummy. Un verbo completamente inventado pero que todos los que os habéis enfrentado a la creación de una tabla de entrada para realizar modelos estadísticos vais a entender perfectamente en que consiste. Dumificar es transformar una variable continua en N variables dicotómicas. Lo entenderemos mejor con un ejemplo gráfico:

dumificar.JPG

En el ejemplo partimos de 8 registros y creamos 4 variables dicotómicas en función de una variable importe. Hemos dumificado la variable importe en 4. Parece fácil de entender el concepto. Bien, pues esto es lo que planteo hacer con SAS. La metodología que voy a emplear es la de siempre, parto de un dataset aleatorio con un identificador y un campo importe que pretendemos transformar en 5 variables (0,1). Para realizar este proceso necesitamos una macro que cuenta las observaciones de un dataset, ya la planteé con anterioridad en otro artículo del blog. De todos modos os dejo completo el código que empieza:

Trucos SAS. Informes de valores missing

A continuación os planteo como truco SAS una duda que nos mandaba LILIANA. Ella necesitaba estudiar los valores perdidos de las tablas de una librería determinada. En este caso vamos a estudiar los missing de las variables numéricas de una librería, de forma análoga se puede hacer con las alfanuméricas. Como siempre vamos a trabajar con un ejemplo que parte de tablas generadas aleatoriamente. Comenzamos generando estas tablas:

libname datos "c:\temp\datos";
%macro aleatorios;

%do i=1 %to 5;

data datos.proyecto_&i.;

do id=1 to 200;

 if int(ranuni(0)*10) = 2 then importe1=.;

 else importe1=round(rand("uniform")*1000,.1);

 if int(ranuni(0)*10) > 0.3 then importe2=.;

 else importe2=round(rand("uniform")*130,.1);

length zona $15.;
if ranuni(0) <=.32 then zona=“España”;
else if ranuni(1) <= 0.32 then zona=“Cataluña”;
else zona=“Resto”;

Trucos Excel. Trasponer con la función indirecto

Una de las tareas más comunes en Excel es la de transponer filas. En ocasiones hemos de transformar columnas en filas o viceversa:

indirecto.JPG

Es muy habitual copiar y pegar transponiendo pero esta labor es muy manual cuando manejamos hojas con gran cantidad de fórmulas y que pueden generar informes automáticos. Para transponer contamos con la ayuda de la función INDIRECTO de exce. En la ayuda se define como:

« Devuelve la referencia especificada por una cadena de texto. Las referencias se evalúan de inmediato para presentar su contenido. Use INDIRECTO cuando desee cambiar la referencia a una celda en una fórmula sin cambiar la propia formula »

Trucos SAS. Lista de datasets en macro variable

Un uso frecuente del proc sql es la generación de macro variables. En este ejemplo vamos a crear una macro variable con el nombre de los dataset de una librería SAS que empiecen por un determinado sufijo. También es un ejemplo bastante práctico del uso de las vistas de SASHELP. Creo que es un ejemplo bastante sencillo y sobre él iremos generando nuevos trucos que espero puedan serviros. Para entender mejor el truco vamos a generar 20 ficheros “ficticios” con variables aleatorias en el directorio c:\temp de nuestro PC:

Macros SAS. Asignar permisos en Unix

Hoy os presento una macro especialmente útil para aquellos que trabajéis en con SAS en arquitecturas Unix. En ocasiones generamos tablas SAS que han de ser modificadas por otros usuarios y éstos no disponen de los permisos adecuados para modificarlas. La siguiente macro los que hace es un «change mode», un chmod que modifica los permisos de las tablas SAS de una librería. Por defecto la macro hace un chmod file 777 que significa que owner, group y others tienen permiso de lectura, escritura y ejecución. Si pusieramos chmod 766 significaría que el owner tiene permiso de lectura, escritura y ejecución, y el group y others permiso de lectura y escritura. Chmod 744 significaría que el owner tiene permisos de lectura, escritura y ejecución, y group y others unicamente permisos de lectura.