Breve entrada sobre el uso de array en SAS. Dada una tabla SAS como ésta con una variable mes1, mes2mesN:

SAS arrays example

Necesitamos identificar el primer y el último elemento no nulo de un array y el número de elementos no nulos de ese array. Veamos el ejemplo:

data datos;
    input id mes1 mes2 mes3 mes4 mes5 mes6;
    datalines;
1 . . . . . .
2 162.18 88.41 919.62 891.25 837.73 163.14
3 . 790.52 160.03 . 60.31 343.30
4 . . 482.45 755.39 . .
5 265.17 963.53 . . 392.06 .
6 . 214.95 616.17 183.01 778.48 57.42
7 191.52 . 208.50 50.55 705.72 .
8 711.76 . . . 193.20 658.45
9 782.67 172.49 539.42 663.28 4.53 358.51
10 695.12 367.74 . 573.47 366.30 951.98
;
run;

Para este proceso creamos un array que recorreremos dos veces: una hacia adelante para identificar el primer elemento y otra hacia atrás para identificar el último elemento:

data datos_procesados;
    set datos;
    array m(*) mes:;

    * PRIMER ELEMENTO;
    primer_idx = 0;
    primero = .;
    do i = 1 to dim(m);
        if m(i) ne . then do;
            primero = m(i);
            primer_idx = i;
            leave;
        end;
    end;

    * ULTIMO ELEMENTO;
    ultimo = .;
    ultimo_idx = 0;
    do i = dim(m) to 1 by -1;
        if m(i) ne . then do;
            ultimo = m(i);
            ultimo_idx = i;
            leave;
        end;
    end;

    * NUMERO DE ELEMENTOS;
    if primer_idx > 0 then num_elementos = ultimo_idx - primer_idx + 1;
    else num_elementos = 0;

    drop i primer_idx ultimo_idx;
run;

Como hemos indicado, el array se recorre dos veces: la primera vez de forma ascendente para buscar el primer elemento y la segunda de forma descendente para encontrar el último; la diferencia más uno es el número de elementos no nulos que tiene ese array. Ejemplo de uso de array en SAS. Saludos.