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:
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;
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.