Un lector del blog preguntaba cómo obtener el valor máximo dentro de un registro, por fila, de una sucesión de variables carácter; 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:

NombreClave1Clave2Clave3
AnaAAB
PepeHMC
JuanAAA

El tema es que necesito calcular el máximo de todas las claves para cada persona, es decir:

NombreClave1Clave2Clave3Max
AnaAABB
PepeHMCM
JuanAAAA

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;
    length Nombre $10 Clave1 Clave2 Clave3 $1;
    input Nombre $ Clave1 $ Clave2 $ Clave3 $;
    datalines;
Ana A A B
Pepe H M C
Juan A A A
;
run;

data datos_max;
    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 maximo al primer elemento del array y vamos recorriendo las variables; si una es mayor que la otra, se modifica el maximo. Espero que le sirva a algún otro lector. Saludos.