L'opérateur d'affectation est le =. Les calculs les plus simples
(addition, soustraction, multiplication, division, exponentiation) se font simplement
par invocation de l'opérateur approprié.
Il n'est pas nécessaire de déclarer les variables en SAS. Tout objet du programme qui,
de par sa nature syntaxique, est interprété comme un nom de variable, est inséré dans
le vecteur de travail en tant que nouvelle variable.
On étudie ci-dessous deux cas particuliers de calcul de variables.
On souhaite créer une table ex nihilo, qui contienne 100 réalisations d'une variable aléatoire
réelle x suivant une loi normale centrée réduite.
On écrit le programme suivant :
La table normale ainsi créée contient deux variables : i (numéro d'itération) et
x (variable suivant une loi normale centrée réduite, obtenue).
L'instruction OUTPUT est ici indispensable. Si on l'omet, seule la dernière observation est
enregistrée dans la table. Ceci tient au fait que SAS n'assimile pas une étape d'une boucle
à une observation. Ainsi, dans le programme suivant :
Le bloc d'instructions est effectué 100 fois pour chaque observation de la table source !
On a vu dans la présentation de l'étape DATA que cela n'est pas immédiat, la raison
en étant que le vecteur de travail est réinitialisé à chaque nouvelle observation calculée.
Pour y remédier, il faut demander à SAS de se souvenir de la valeur précédente prise par la variable.
Cela se fait grâce à l'instruction RETAIN :
La syntaxe de RETAIN prévoit la définition (facultative) d'une valeur initiale pour mavariable, valeur qui lui sera affectée lors de sa première apparition dans le programme. Si l'on souhaite calculer un cumulé, on choisira cette valeur égale à 0.
On reprend le cas étudié dans le paragraphe "La logique ligne par ligne de l'étape DATA" en ajoutant une instruction RETAIN :
Cette fois, la variable total contient bien le cumulé des coefficients :
total | coefficient | v1 | v2 | un |
---|---|---|---|---|
2 | 2 | 4 | 6 | 1 |
5 | 3 | 3 | 5 | 1 |
9 | 4 | 5 | 4 | 1 |
Remarque :
L'instruction RETAIN ne peut s'appliquer qu'à une nouvelle variable !
On reprend cette fois la table ab issue de l'interclassement des tables {nom,note}
du paragraphe "Concaténation et fusion de tables". On souhaite calculer le cumulé des
notes pour chaque élève (même si cela n'a pas grand sens).
Comme précédemment, on utilise l'instruction RETAIN.
On a besoin de plus de repérer la première et la dernière occurrence de chaque nom d'élève.
Pour cela, on utilise FIRST et
LAST :
On obtient le résultat suivant :
nom | note | cumule |
---|---|---|
tata | 18 | 18 |
titi | 14 | 14 |
titi | 10 | 24 |
toto | 12 | 12 |
tutu | 8 | 8 |
Cela peut être vu comme un calcul de cumulé, puisque le numéro d'observation est incrémenté de 1 à chaque ligne. On peut donc écrire, en utilisant l'instruction de sommation :
Cependant, il existe en SAS une variable notée _n_ qui désigne le nombre d'itérations réalisées de l'étape DATA en cours. Dans le cas simple d'une recopie de table, cette grandeur correspond exactement au numéro de l'observation courante. On peut donc simplement écrire :