Je fait le Chain-Ladder en SAS.
Pour le faire plus facilement il faut oublier la forme "triangulaire" de présentation et passer à la forme "linéaire". J'explique.
Normalement on travaille avec des "triangles", i.e. des matrices rectangulaire (dont seulement la partie supérieure gauche est remplie, c'est pour ça qu'on les appelle "triangles") avec des coordonnées de genre "exercice de survenance" en Y et "année de déroulement" en X. Cette construction est très facile à visualiser et reste toujours possible sous SAS, mais la programmation devient une vrai galère. Il est beaucoup plus simple de passer par la table à trois colonnes :
1. coordonné X (déroulement dans notre exemple) ;
2. coordonné Y (année de survenance) ;
3. valeur du triangle (nombre de sinistres, règlement, charge, etc.) ;
Petite remarque concernant le 3) : on peut dans le cas d'utilisation de cette structure combiner plusieurs triangles dans une seule table en ajoutant des colonnes de type 3) à volonté.
Exemple de cette présentation pour tes données :
Le passage de cette forme à la forme triangulaire (uniquement à la fin, pour la sortie et la présentation) se fait par la proc transpose :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 DATA toto; input a b v; cards; 0 0 1381 0 1 4399 0 2 4229 0 3 435 0 4 465 0 5 205 0 6 110 0 7 67 1 0 859 1 1 6940 1 2 2619 1 3 1531 1 4 517 1 5 572 1 6 287 2 0 6482 2 1 6463 2 2 3995 2 3 1420 2 4 547 2 5 723 3 0 2899 3 1 16428 3 2 5521 3 3 2424 3 4 477 4 0 3964 4 1 15872 4 2 8178 4 3 3214 5 0 6809 5 1 24484 5 2 27928 6 0 11155 6 1 38229 7 0 10641 ; run;
Du coût, l'opération de cumul (dont tu as besoin pour ta table) se fait toute seule (ou presque) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 proc transpose data=TOTO out=TITI prefix=V; by A; id B; var V; run;
De même pour calculer le coefficient de propagation (TOTO a inner join TOTO b on a.X = b.X - 1 and a.Y = b.Y) ou autres opérations.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 proc sql; create table TOTO_SUM as select a.A, a.B, sum(b.V) as V from TOTO a inner join TOTO b on a.A = b.A and a.B >= b.B group by a.A, a.B order by a.A, a.B ; quit;
Attention quand-même aux valeurs manquants. En constituant la première table "plate" il faut veiller pour ne pas avoir de trous de genre (X; Y) = (10; 1) est absent mais (11; 1) et (12; 1) (aussi bien que pour tous les X < 10 et Y = 1) présents. Ça arrive, par exemple, à la fin des cadences de liquidations où les mouvements se font pas toutes les années.
Il faut dans ce cas faire ce qu'on appelle chez nous "la normalisation", i.e. ajouter des lignes fictives dans le triangles plat non cumulé avec toutes les valeurs possibles de X et Y du triangle et 0 comme valeur.
J'espère que la réponse n'est pas complètement à côté de la plaque. C'est bien ça que tu voulais faire ?
Partager