1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| %MACRO M;
DATA CALCUL (DROP = Lx: AGE);
/* Déclaration des arrays */
ARRAY Lx_inv(16:67,0:49) _TEMPORARY_;
ARRAY Sx(16:66,0:35) _TEMPORARY_;
ARRAY Lx_Inc(16:66,0:36) _TEMPORARY_;
/* Remplissage des arrays avec les données de la table Tb_SAS.Lx_Inval */
/* _N_ est une variable automatique qui permet de retourner le numéro de ligne lue
Cette instruction est indispensable pour que SAS ne réalise cette opération qu'une seule fois lors
de l'étape DATA. Notre but c'est de charger l'array une fois et de s'en servir après, sans cette
instruction l'array sera rechargé à chaque itération -> perte de temps et pas optimisé. */
/* END=LAST permet de créer une variable numérique temporaire appelée LAST, initialisée à 0 et
valant 1 quant la dernière observation est lue. Cette variable n'est pas écrite dans la DATA.
Après le mot clé "End = " tu peux mettre ce que tu veux pour créer un marqueur qui aura ce nom.
Ce marqueur vaudra 1 si on est à la dernière observation de la table et 0 sinon.
Ce marqueur n'est pas output par défaut, comme les marqueurs FIRST et LAST. */
LAST_1=0;
IF _N_ = 1 THEN DO UNTIL (LAST_1 = 1);
SET Tb_SAS.Lx_Inval END=LAST_1;
%DO i=0 %TO 49;
Lx_inv{Age,&i}=Lx_INV_&i;
%END;
END;
LAST_2=0;
IF _N_ = 1 THEN DO UNTIL (LAST_2 = 1);
SET Tb_SAS.Sx_Passage; END=LAST_2;
%DO j=0 %TO 35;
Sx{AGE,&j}=Sx_&j;
%END;
END;
LAST_3=1;
IF _N_ = 1 THEN DO UNTIL (LAST_3 = 1);
SET Tb_SAS.Lx_Incap; END=LAST_3;
%DO j=0 %TO 35;
Lx_inc(AGE,&j)=Lx_INC_&j;
%END;
END;
RUN;
%MEND;
%M; |
Partager