Archivo de la etiqueta: macros SAS

Macros (fáciles) de SAS. Busca duplicados

Una macro muy sencilla que ha aparecido en un programa de funcionalidades y que busca registros duplicados en tablas SAS. Es muy sencilla y a alguien puede serle útil y para eso estamos, para compartir conocimientos aunque sean sencillos. Pocos somos los que compartimos nuestro conocimiento y encima poniendo nuestro dinero, en fin, que me distraigo del tema.

%macro busca_duplicados ( dataset, campo);
proc sql;
create table duplicados (where=(frec>1)) as select
&campo.,
count(*) as frec
from &dataset.
group by 1;
quit;
%mend;

No pongo ni ejemplo de uso, muy fácil. Pero ya verás como alguien le saca partido. Y todo esto de forma altruista, insisto, que si no me valoro yo no me valora nadie. Saludos.

Macros SAS. Agrupando variables categóricas

Agrupar variables con SAS es una de las tareas más habituales. Las variables continuas las agrupamos según un criterio y las discretas, en principio, ya vienen agrupadas. El problema con las variables discretas es que pueden tomar muchos valores, muchos de ellos con poco valor que habitualmente agrupamos en un rango “OTROS”. Pues bien, hoy quería mostraros una macro muy sencilla que utilizo para crear ese cajón desastre. El código tiene algún aspecto muy interesante, es el que os pongo a continuación:

%macro agrupa_frecuencias(entrada=,/*DS DE ENTRADA*/
vargrupo=,/*VARIABLE QUE AGRUPA*/
nombre=count,/*VARIABLE DE FRECUENCIAS*/
numgr=,/*NUMERO DE GRUPOS*/
resto=,/*CATEGORIA RESTO*/
salida=/*DS DE SALIDA*/);
*TABLA DE FRECUENCIAS CON TODOS LOS VALORES;
proc freq data=&entrada. noprint;
tables &vargrupo./list missing
out=&salida. (drop=percent rename=&vargrupo.=agr);
quit;
proc sort data=&salida. ; by descending count;
*EN FUNCION DEL TIPO DE VARIABLE CREAMOS EL RESTO;
data &salida. ;
set &salida. ;
&vargrupo.="&resto.";
if _n_<&numgr. then &vargrupo.=put(left(agr),$10.);
run;
*SUMARIZAMOS;
proc summary sum nway missing; class &vargrupo. ;
output out=&salida. (drop=_type_ _freq_) sum(count)=&nombre.;
quit;
%mend;

Breve explicación del mismo, es un código de ejecución muy rápida y no tiene una calidad de producción como casi todo lo que hacemos los que trabajamos sólo con BASE. Sigue leyendo Macros SAS. Agrupando variables categóricas

Macros SAS. Calular la longitud de un número.

Ha llegado hoy una búsqueda que no ha permanecido en AyD ni 20 segundos. Quería calcular la longitud de un número con SAS. Como yo estoy aquí para compartir mis conocimientos y hay una persona que los necesita aquí está esta macro que espero o sea de utilidad:


%macro largo(num);
length(compress(put(&num.,32.)))
%mend;

Esta macro recibe un parámetro que ha de ser un número y lo que hace es transformarlo a carácter comprimido y calcular su longitud. Veamos ejemplos de uso:


data uno;
input x;
datalines;
1234
12345
123456
1234567
12345678
1
12
123456789
1234567890
;
run;


data uno;
set uno;
y=%largo(x);
*NOS QUEDAMOS CON LA PRIMERA CIFRA;
z=int(x/(10**(%largo(x)-1)));
run;
proc print;
run;

Con este ejemplo vemos perfectamente su funcionamiento, además puede ir en operaciones matemáticas como el ejemplo en el que se queda con la primera cifra de un número. Espero que sea de utilidad y como siempre si tenéis dudas, sugerencias o un trabajo con un horario inferior o igual a 40 horas semanales reales podéis contactar conmigo en rvaquerizo@analisisydecision.es