WPS

Truco SAS. Tablas de una librería en una macro variable

Me plantean una duda, como crear un conjunto de datos con las tablas de una librería en sas y posteriormente generar una macro variable con ellos, esta es una entrada análoga a otra del blog pero sirve para recordar como funciona el ODS de SAS y el PROC DATASETS un procedimiento que no he usado habitualmente. Lo primero que vamos a hacer es observar que resultados arroja el PROC DATASETS en su sintaxis más sencilla, ver los contenidos de una librería:

Macro SAS. Número de variables de un dataset en una macro

Una macro que nos permite saber el número de variables que tiene un conjunto de datos SAS. Es una petición de una lectora y la macro es análoga a otra que ya pusimos en el blog allá por 2010. Veamos cómo funciona:

%macro numvars(datos);
 %global numvars;
 /*ABRIMOS EL CONJUNTO DE DATOS PARA VER SUS CARACTERISTICAS*/
 %let datosid = %sysfunc(open(&datos));
 /*SI ESTA ABIERTO ENTONCES LA FUNCION ATTRN NOS DA EL NUMERO DE VARIABLES*/
 %if &datosid %then %do;
 %let numvars =%sysfunc(attrn(&datosid,nvars));
 /*CERRAMOS EL CONJUNTO DE DATOS*/
 %let rc = %sysfunc(close(&datosid));%end;
 %mend;
data ejemplo;
 a=1;
 b=2;
 c=3;
 d=4;
 f=5;
 g=6;
 run;
%numvars(ejemplo);
 %put _user_;

Utilizamos las funciones I/O de SAS, en concreto ATTRN que unido a NVARS nos permite saber el número de variables que tiene un dataset, el número de variables lo ponemos en la macrovariable global &numvars..

Macro SAS. Crear variables dummy desde una variable categórica

En alguna ocasión ya he conjugado el verbo dumificar y preparando una segmentación he creado una macro SAS que genera variables dummy a partir de variables categóricas, es decir, si la variable A toma valores 1, 2 y 3 tendría que generar A_1 con valor 1 si A toma 1 y con valor 0 en caso contrario, A_2 tiene valor 1 si A es igual a 2 y A_3 tiene valor 1 si A es igual a 3, no es complicado de comprender, pasamos de una variable con 3 niveles a 3 variables con valores 0 o 1. Para esto podemos emplear arrays o la siguiente macro:

Tipos de merge con SAS o WPS

Una chuleta con los tipos de merge que se pueden hacer en un paso data con SAS:

Para aquellos que empiezan a trabajar con SAS será de mucha utilidad. Un saludo.

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, longth … pero bueno, ya que tengo un metodo de separar el texto de la fila como hago para que cada palabra este en una nueva fila? ojala me hayan entendido y me den una idea de como hacer eso en un proc sql, con una macro o como sea, solo una pequeña orientación me serviria mucho, gracias!!!!!

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 nu y desviación típica sigma…

¡¡¡FU FU FU FU FU FU!!!

SAS vs WPS. Diferencias de precio

Minequest tiene una actualización de los costes en software si se utiliza SAS o se utiliza WPS. Como vemos es sustancialmente más económico emplear WPS. Y si hablamos de instalación en cliente/servidor la diferencia se incrementa. En breve hablaré de las posibilidades estadísticas que ofrece WPS. De todos modos pasaros por su web y veréis los nuevos procedimientos que tiene la V3.

Analisis cluster con SAS. La importancia de las semillas en las k-medias

El PROC FASTCLUS en SAS nos permite realizar análisis de agrupamiento dirigido mediante el algoritmo de las k-medias. Este algoritmo tiene algunos problemas pero nos puede servir para agrupar de forma multivariante observaciones. Es rápido, sencillo de explicar y con algunas lagunas no funciona mal. Como aproximación a nuestras segmentaciones puede ser muy práctico. Hoy se va a utilizar para identificar a los clientes más complicados de segmentar, a aquellas observaciones que quedan en las zonas grises. (http://www.datanalytics.com/blog/2011/08/03/clustering-iii-sobresimplificacion/)
Estas zonas grises en muchos casos son más importantes que la segmentación en sí. Si estamos con un problema de taxonomía (clasificar especies) puede ser menos importante, pero si clasificamos inversiones, clientes,… ¿qué pasa con aquellos que no sabemos ubicar? Escribimos segmentar en un buscador y tenemos esta imagen:

Trucos SAS. Lista de variables missing

Duda que me plantearon ayer por la tarde. Dada una serie de variables determinar que registro tiene todas esas variables nulas. El truco que planteo puede servir para determinar incluso cuantos valores perdidos tiene esa lista de variables, ese truco me le reservo para otro día. El código lo acompaño con un ejemplo para que se pueda ejecutar y analizar su funcionamiento:

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;

data fila_nula;
set aleatorio;
nulo=0;
array varib(*) aleat1--aleat5;
do j=1 to dim(varib);
if not missing(varib(j)) then nulo=i;
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 valor 0. Espero que os sea de utilidad. Saludos.

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 mi me ha pasado). Saludos.

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:

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:

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.