La logique "ligne par ligne" de l'étape DATA

Soit le programme suivant :

DATA maLib.a ;
 total=0 ;
 SET maLib.cours ;
 coefficient=coefficient+1 ;
 un=1 ;
 total=total+coefficient ;
RUN ;

Une table a est créée dans la librairie maLib.

Première étape : dans le vecteur de travail une variable total apparaît qui vaut 0

total
0

Puis est recopiée la première ligne de b.
 

table malib.cours
coefficientv1v2
146
235
354
vecteur de travail
totalcoefficientv1v2
0146
table malib.a

Puis au champ coefficient est ajouté 1. Ensuite on y ajoute une variable nommée un qui vaut 1.

table malib.cours
coefficientv1v2
146
235
354
vecteur de travail
totalcoefficientv1v2un
02461
table malib.a

Enfin, on affecte à total sa valeur actuelle augmentée de la valeur de coefficient.

table malib.cours
coefficientv1v2
146
235
354
vecteur de travail
totalcoefficientv1v2un
22461
table malib.a

On a pour le moment travaillé uniquement sur le vecteur de travail, qui contient la seule ligne courante.

RUN enregistre le vecteur de travail en 1e ligne de la table a et réinitialise le vecteur de travail.

table malib.cours
coefficientv1v2
146
235
354
vecteur de travail
table malib.a
totalcoefficientv1v2un
22461

Si bien qu'au début de l'étape 2, total vaut 0, puis on récupère la ligne 2 de b, on incrémente le coef, on ajoute la colonne un, on met à jour total avec le coef courant.

Voilà donc le résultat du programme :

table malib.a
totalcoefficientv1v2un
22461
33351
44541

En conclusion, on voit qu'il est impossible de calculer de cette manière le cumulé du coefficient, puisque d'une ligne sur l'autre, SAS oublie les valeurs précédentes.

Il y a cependant un moyen : demander à SAS de se souvenir de la valeur précédente d'une variable, grâce à l'instruction RETAIN (voir paragraphe "Génération de variables").