Publié le :
Programmation SAS CREATION_INTERNE

Exemples: Boucles DO

Ce code est également disponible en : Deutsch English Español
En attente de validation
Analyse fonctionnelle détaillée des boucles DO. Les boucles DO sont des structures de contrôle de flux utilisées pour exécuter un groupe d'instructions de manière répétitive. Elles peuvent être itératives (avec un index, une liste ou une séquence), ou conditionnelles (tant qu'une condition est vraie ou jusqu'à ce qu'une condition devienne vraie). Les exemples présentés couvrent ces différentes formes, démontrant leur application pour la manipulation de données, le calcul d'intérêts et d'autres scénarios. Il est souligné que la syntaxe et le comportement sont identiques que le pas DATA s'exécute sur le serveur de calcul SAS© ou dans l'environnement CAS, bien que l'exécution en CAS puisse parfois se faire en un seul thread si aucune table d'entrée n'est spécifiée.
Analyse des données

Type : CREATION_INTERNE


Les exemples utilisent des données générées (datalines) ou SASHELP.

1 Bloc de code
DATA STEP Data
Explication :
Cet exemple utilise une instruction DO itérative pour décrémenter de manière répétée les valeurs de la variable 'balance' et écrire ces valeurs dans le jeu de données de sortie. L'étape DATA s'exécute sur le serveur de calcul SAS.
Copié !
1DATA loan;
2 balance=10000;
3 DO payment_number=1 to 10;
4 balance=balance-1000;
5 OUTPUT;
6 END;
7RUN;
8PROC PRINT DATA=loan;
9RUN;
2 Bloc de code
DATA STEP Data
Explication :
Cet exemple utilise la même boucle DO itérative pour exécuter l'étape DATA dans CAS et créer une table de sortie CAS. Bien que l'étape DATA s'exécute dans CAS, elle s'exécute en un seul thread car aucune table d'entrée n'est spécifiée.
Copié !
1cas casauto sessopts=(caslib='casuser');
2LIBNAME mylib cas;
3 
4DATA mylib.loan;
5 balance=10000;
6 DO payment_number=1 to 10;
7 balance=balance-1000;
8 OUTPUT;
9 END;
10RUN;
11PROC PRINT DATA=mylib.loan;
12RUN;
3 Bloc de code
DATA STEP Data
Explication :
Cet exemple montre comment imbriquer une boucle DO dans une autre pour calculer la valeur d'un investissement d'un an avec un intérêt annuel de 7,5 %, composé mensuellement. L'imbrication est utile lorsque vous devez répéter une action interne pour chaque passage de la boucle externe.
Copié !
1DATA earn;
2 Capital=2000;
3 DO Year=1 to 10;
4 DO Month=1 to 12;
5 Interest=Capital*(.075/12);
6 Capital+Interest;
7 OUTPUT;
8 END;
9 END;
10RUN;
11PROC PRINT DATA=earn; RUN;
4 Bloc de code
DATA STEP Data
Explication :
Cet exemple utilise la syntaxe DOLIST pour itérer sur une liste de valeurs, d'expressions ou de séquences. L'index de la boucle DO prend successivement les valeurs spécifiées dans la liste, qui sont séparées par des virgules.
Copié !
1DATA do_list;
2 x=-5;
3 DO i=5, /*a single value*/
4 5, 4, /*multiple values*/
5 x + 10, /*an expression*/
6 80 to 90 BY 5, /*a sequence*/
7 60 to 40 BY x; /*a sequence with a variable*/
8 OUTPUT;
9 END;
10RUN;
11PROC PRINT DATA=do_list; RUN;
5 Bloc de code
DATA STEP Data
Explication :
Cet exemple utilise la syntaxe itérative DO TO-<valeur> pour incrémenter de manière répétée les valeurs de 'x'. L'instruction OUTPUT est utilisée pour écrire chaque valeur incrémentée de 'x' dans le jeu de données de sortie. La valeur 'TO' spécifie la valeur finale de la variable d'index.
Copié !
1DATA do_to;
2 x=0;
3 DO i=0 to 10;
4 x=x+1;
5 OUTPUT;
6 END;
7RUN;
8PROC PRINT DATA=do_to;
9RUN;
6 Bloc de code
DATA STEP Data
Explication :
Cet exemple utilise la syntaxe itérative DO TO-<valeur> BY-<incrément> pour incrémenter de manière répétée les valeurs de 'x'. La valeur 'BY-<incrément>' spécifie que la variable d'index est incrémentée de '2' à chaque exécution de la boucle. L'instruction OUTPUT écrit chaque valeur incrémentée de 'x' dans le jeu de données de sortie.
Copié !
1DATA do_to_by;
2 x=0;
3 DO i=0 to 10 BY 2;
4 x=x+1;
5 OUTPUT;
6 END;
7RUN;
8PROC PRINT DATA=do_to_by;
9RUN;
7 Bloc de code
DATA STEP Data
Explication :
Cette première étape DATA utilise une boucle DO pour exécuter un groupe d'instructions de manière répétée tant qu'une condition est vraie. Le programme calcule le nombre de paiements nécessaires pour un montant de prêt spécifié en décrémentant de manière répétée le 'Balance' tant que le solde est supérieur à zéro. L'étape DATA s'exécute sur le serveur de calcul SAS.
Copié !
1DATA loan;
2 balance=10000;
3 payment=0;
4 DO while (balance>0);
5 balance=balance-1000;
6 payment=payment+1;
7 OUTPUT;
8 END;
9RUN;
10PROC PRINT DATA=mylib.loan;
11RUN;
8 Bloc de code
DATA STEP Data
Explication :
Cette étape DATA charge les mêmes données dans une nouvelle table dans une bibliothèque différente, 'mylib.loan', puis calcule le nombre de paiements nécessaires pour le prêt spécifié. Elle le fait en itérant de manière répétée et en décrémentant les valeurs de 'Balance' jusqu'à ce que le solde soit nul. L'étape DATA s'exécute dans CAS mais en un seul thread car il n'y a pas de table d'entrée.
Copié !
1LIBNAME mylib cas;
2 
3DATA mylib.loan;
4 balance=10000;
5 payment=0;
6 DO until (balance=0);
7 balance=balance-1000;
8 payment=payment+1;
9 OUTPUT;
10 END;
11RUN;
12PROC PRINT DATA=mylib.loan;
13RUN;
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.
Informations de Copyright : Copyright © SAS Institute Inc. All Rights Reserved


Banner
Le Conseil de l'Expert
Expert
Simon
Expert SAS et fondateur.
« Pour vos simulations financières ou vos calculs d'échéanciers, utilisez toujours une variable d'index claire (ex: Year, Month). Une fois la boucle terminée, cette variable reste dans votre table ; elle est donc précieuse pour créer des graphiques ou des rapports sans avoir à recalculer les périodes. »