Publié le :
Bases du Langage CREATION_INTERNE

Démonstration des boucles DO et du traitement itératif

Ce code est également disponible en : Deutsch English Español
En attente de validation
Ce programme présente une série d'exemples progressifs pour comprendre le fonctionnement des boucles dans SAS©. Il couvre la syntaxe de base d'une boucle itérative, l'impact de l'instruction OUTPUT pour contrôler l'écriture des observations, les variations d'incrémentation (pas positif, négatif, décimal), l'itération sur une liste de valeurs spécifiques, les boucles imbriquées, ainsi que les boucles conditionnelles DO WHILE et DO UNTIL.
Analyse des données

Type : CREATION_INTERNE


Toutes les tables sont créées dynamiquement à l'aide de boucles et d'assignations de variables au sein des étapes DATA.

1 Bloc de code
DATA STEP Data
Explication :
Création d'une table 'simple1' avec une boucle simple de 1 à 4. Sans instruction OUTPUT explicite à l'intérieur de la boucle, l'écriture dans la table se fait implicitement à la fin de l'étape DATA (une seule observation finale contenant la dernière valeur de i et answer).
Copié !
1/*
2Demonstration: Simple Illustration of How DO Loops Work
3*/
4DATA simple1;
5 DO i = 1 to 4;
6 answer = 1 + i;
7 END;
8RUN;
9 
10PROC PRINT DATA=simple1 noobs;
11RUN;
2 Bloc de code
DATA STEP Data
Explication :
Création de 'simple2'. L'ajout de l'instruction OUTPUT à l'intérieur de la boucle force l'écriture d'une observation à chaque itération. La table résultante aura donc 4 lignes.
Copié !
1/*
2Demonstration: Using the Output Statement
3*/
4DATA simple2;
5 DO i = 1 to 4;
6 answer = 1 + i;
7 OUTPUT;
8 END;
9RUN;
10 
11PROC PRINT DATA=simple2 noobs;
12RUN;
3 Bloc de code
DATA STEP Data
Explication :
Similaire à l'exemple précédent, mais la variable d'itération 'i' est supprimée de la table finale grâce à l'option (drop=i).
Copié !
1*Simple example #3;
2DATA simple3 (drop=i);
3 DO i = 1 to 4;
4 answer = 1 + i;
5 OUTPUT;
6 END;
7RUN;
8 
9PROC PRINT DATA=simple3 noobs;
10RUN;
4 Bloc de code
DATA STEP Data
Explication :
Démonstration d'une boucle avec un incrément (BY) de 2. La boucle itère pour i = 0, 2, 4, ..., 10.
Copié !
1*Simple example #4;
2DATA simple4 (drop=i);
3 DO i = 0 to 10 BY 2;
4 answer = 1 + i;
5 OUTPUT;
6 END;
7RUN;
8 
9PROC PRINT DATA=simple4 noobs;
10RUN;
5 Bloc de code
DATA STEP Data
Explication :
Utilisation d'un incrément décimal (0.25). La boucle itère plus finement entre 0 et 10.
Copié !
1*Simple example #5;
2DATA simple5 (drop=i);
3 DO i = 0 to 10 BY .25;
4 answer = 1 + i;
5 OUTPUT;
6 END;
7RUN;
8 
9PROC PRINT DATA=simple5 noobs;
10RUN;
6 Bloc de code
DATA STEP Data
Explication :
Exemple de boucle décrémentale (compte à rebours) utilisant un pas négatif (BY -1), allant de 10 à 1.
Copié !
1*Simple example 6;
2DATA simple6 (drop=i);
3 DO i = 10 to 1 BY -1;
4 answer = 1 + i;
5 OUTPUT;
6 END;
7RUN;
8 
9PROC PRINT DATA=simple6 noobs;
10RUN;
7 Bloc de code
DATA STEP Data
Explication :
Itération sur une liste explicite de valeurs non séquentielles (10, 12, 23, 147).
Copié !
1*Simple example 7;
2DATA simple7 (drop=i);
3 DO i = 10, 12, 23, 147;
4 answer = 1 + i;
5 OUTPUT;
6 END;
7RUN;
8 
9PROC PRINT DATA=simple7 noobs;
10RUN;
8 Bloc de code
DATA STEP Data
Explication :
Illustration de boucles imbriquées. Note : la boucle interne 'do j = i**2;' n'est pas une boucle itérative classique (pas de 'to'), elle s'exécute une fois en assignant la valeur calculée à j. L'OUTPUT est déclenché à chaque passage.
Copié !
1*Nesting do loops;
2DATA nested;
3 DO i = 1 to 10;
4 DO j = i**2;
5 OUTPUT;
6 END;
7 END;
8RUN;
9 
10PROC PRINT DATA=nested noobs;
11RUN;
9 Bloc de code
DATA STEP Data
Explication :
Utilisation de DO WHILE. La condition est évaluée au début de la boucle. Si 'answer' est manquant au départ, la condition peut être fausse immédiatement ou nécessiter une initialisation (ici, SAS initialise implicitement à 0 pour l'instruction somme 'answer + 1', donc la boucle fonctionne).
Copié !
1*Example of using do while;
2DATA simple8;
3 DO while (answer < 11);
4 answer + 1;
5 OUTPUT;
6 END;
7RUN;
8 
9PROC PRINT DATA=simple8 noobs;
10RUN;
10 Bloc de code
DATA STEP Data
Explication :
Utilisation de DO UNTIL. La condition est évaluée à la fin de la boucle, garantissant que le code à l'intérieur s'exécute au moins une fois.
Copié !
1*Example of using do until;
2DATA simple9;
3 DO until (answer > 9);
4 answer + 1;
5 OUTPUT;
6 END;
7RUN;
8 
9PROC PRINT DATA=simple9 noobs;
10RUN;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.