Máximo por registro de una serie de variables carácter en SAS

24 Feb

Un lector del blog preguntaba como obtener el valor máximo dentro de un registro, por fila, de una sucesión de variables caracter; evidentemente la función max no servía porque es específica para variables numéricas. La duda la planteaba del siguiente modo:

Pero tengo una duda que no soy capaz de sacar y no veo ninguna cosa parecida para poder sacarlo, a ver si me puedes ayudar, o si no, pues me dices que no y no hay ningún problema.

Tengo un data de este estilo:
Nombre    Clave1    Clave2    Clave3
Ana             A            A            B
Pepe           H            M            C
Juan           A             A            A

El tema es que necesito calcular el máximo de todas las claves para cada persona, es decir,
Nombre    Clave1    Clave2    Clave3    Max
Ana             A            A            B         B
Pepe           H            M            C        M
Juan           A             A            A         A

Como son letras, no me funciona el max en el proc sql y tampoco sé ninguna función que pueda pasarme las letras a numéricas.
Está claro que la única manera que se me ocurre es transformando las letras a números con un case, hacer el máximo y después transformarlo otra vez a letras, pero es por si sabes alguna manera mejor de hacerlo.

La solución que le planteo se realiza con un array donde seleccionamos sólo las variables clave:

[sourcecode language=»SAS»]
Data datos;
input Nombre Clave1 Clave2 Clave3;
datalines;
Ana A A B
Pepe H M C
Juan A A A
;run;

data datos;
set datos;
array cl (*) clave:;
maximo=cl(1);
do i=1 to dim(cl);
if cl(i)>maximo then maximo=cl(i);
end;
drop i;
run;[/sourcecode]

Inicializamos el máximo al primer elemento del array y vamos recorriendo las variables, si una es mayor que la otra se modifica el máximo. Espero que le sirva a algún otro lector. Saludos.

2 respuestas a «Máximo por registro de una serie de variables carácter en SAS»

  1. Hola,

    Tengo dos servidores de SAS que uso y habitualmente tengo que hacer querys que utilizan tablas de ambos servidores. He conseguido hacerlas con el guide pero no consigo trasladarlo al código.

    Si copio el código que genera el guide me dice que la tabla no esta en mi servidor (Obvio porque la tabla origen está en el segundo servidor) Creo que el guide genera una copia de la tabla en el servidor actual y entonces es cuando ejecuta la query pero no consigo replicar ese paso.

    ¿Cómo puedo solucionar esto?

    Muchas gracias!!

    • Es un problema de Enterprise Guide. Para mover tablas entre servidores no puedes hacer data LOCAL01; set RED01; Y mucho menos PROC SQL. Para mover ficheros entre servidores puedes emplear el proc cport o un script que haga un FTP entre servidores. Pero descartaría hacer FTP porque desde Guide local no puedes hacer comandos X.

      Busca información sobre el proc CPORT y el PROC XPORT. El PROC DONWLOAD tampoco funciona en Guide. Saludos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *