STT1682 – Progiciels en Statistique et Actuariat Cours 4

publicité
STT1682 – Progiciels en Statistique et Actuariat
Cours 4 - Opérations Avancés
Programmation en SAS
Déclaration – IF/THEN (Conditions SAS)
Pour effectuer des opérations SAS seulement si une ou plusieurs conditions sont respectés, on doit
utiliser l'opération IF/THEN.
Syntaxe #1 :
IF CONDITION1 THEN OPERATION1;
ELSE OPERATION2;*Le ELSE est facultatif;
Si CONDITION1 est effectué, OPERATION1 sera exécuté sur la base de donnée, sinon OPERATION2
sera exécuté.
Note: Si aucune opération est spécifiée, l'opération IF est traité comme une WHERE (tout ce qui ne
répond pas à la condition n'est pas conservé dans la base de donnée)
Exemple #1 :
IF SEXE="M" THEN PRIME=PRIME*1.15;
Déclaration – IF/THEN DO
Pour effectuer un bloc d'opérations si la condition est respecté, on utilisera plutôt l'opération
IF/THEN DO:
Syntaxe #2 :
IF CONDITION1 THEN DO;
OPERATION1;
OPERATION2;
...
END;
ELSE DO;
OPERATION1;
OPERATION2;
...
END;
Note : Ne pas oublier le END; à la fin de chaque bloc de conditons.
David Langlois – notes STT1682
1
Exemple #2:
IF SEXE="M" THEN DO;
PRIME=PRIME*1.15;
Message="Surcharge Homme";
END;
ELSE DO;
PRIME=PRIME*0.8;
Message="Rabais Femme";
END;
Déclaration – IF/ELSE IF
Même si on peut effectuer plusieurs opérations IF, une à la suite de l'autre, il ne faut pas oublier
que SAS va exécuté chacune d'entre elles sur chacune des observations de la base de donnée.
Cependant, des fois certaines conditions ne seront jamais vrais si une autre condition est
respectée. Par exemple :
IF AGE=23 THEN PRIME=PRIME*1.10;
IF AGE=24 THEN PRIME=PRIME*1.05;
IF AGE=25 THEN PRIME=PRIME*1.00;
...
Dans le code ci-dessous, si age=23, les autres lignes de codes deviennent inutiles, mais vont quand
même être exécutés sur chacune des observations.
Une façon plus efficace de coder serait d'utiliser l'opération IF/ELSE IF :
Syntaxe #3 :
IF CONDITION1 THEN OPERATION1;
ELSE IF CONDITION2 THEN OPERATION2;
ELSE IF CONDITION3 THEN OPERATION3;
...
ELSE OPERATION4;
Note: Peut aussi être utilisé avec l'opération THEN DO;
Exemple #3:
IF AGE=23 THEN PRIME=PRIME*1.10;
ELSE IF AGE=24 THEN PRIME=PRIME*1.05;
ELSE IF AGE=25 THEN PRIME=PRIME*1.00;
David Langlois – notes STT1682
2
Déclaration ARRAY (Vecteurs SAS)
Comme SAS exécute le code ligne par ligne, un vecteur pour lui est tout simplement un
regroupement de variables et peut seulement contenir l'information d'une observation à la fois.
L'utilisation des vecteurs sera donc pratique pour effectuer un traitement similaire à plusieurs
variables facilement à l'aide d'une boucle au lieu de répeter plusieurs fois le même code.
Syntaxe :
ARRAY NOMVECTEUR[X] LENGTH LISTVARIABLES;
La déclaration si-dessus va créer le vecteur NOMVECTEUR contenant X variables de longueur
LENGTH et chacune de ces variables sont spécifié dans LISTVARIABLES
Exemple #1:
ARRAY NOM[3] $10 nom1 nom2 nom3;
Le vecteur NOM composé des variables nom1, nom2 et nom3 (1e, 2e et 3e position) est créé où
chacune des positions sera une chaîne de caractère de longueur 10.
Exemple #2:
ARRAY PRIME[*] PRIME1-PRIME10;
Note
- L'asterix sert à définir le vecteur suffisament grand pour contenir toutes les variables listés (10
dans cet exemple)
- Le tiret peut être utilisé pour définir un groupe de variable contenant seulement un chiffre à la fin
de différent (i.e. PRIME1, PRIME2, PRIME3...)
Pour appeler une variable contenu dans un vecteur, on a qu'à écrire le vecteur avec la position de
la variable désirée. Par exemple : NOM[1] peut être utilisé pour faire référence à la variable nom1.
David Langlois – notes STT1682
3
Déclaration DO (Boucles SAS)
Pour effectuer plusieurs opérations en chaîne, sur chacune des observations, il peut des fois être
pratique d'utiliser une boucle SAS (Déclaration DO)
Syntaxe :
DO K=X TO Y BY Z;
...
END;
K=Nouvelle Variable créé qui sera incrémenté tout au long de la boucle
X=Constante initiale pour commencer la boucle
Y=Constante final où la boucle se terminera
Z=Incrémentation entre chaque boucle (peut être négative) - Facultatif (1 par défaut)
En résumé, la boucle DO va effectuer toutes les opérations contenus entre le DO et le END pour K
allant de X jusqu'à Y par bond de Z.
Exemple :
X=0;
DO K=10 TO 2 BY -2;
X=X+K;
END;
Les boucles seront aussi très pratiques pour effectuer des opérations à l'aide de vecteurs
Exemple #2 :
PRIME_TOT=0;
DO K=1 TO 10;
PRIME_TOT=PRIME_TOT+PRIME[K] ;
END;
David Langlois – notes STT1682
4
Téléchargement