Publié le :

Exemple : Modifier des données

Ce code est également disponible en : Deutsch English Español
En attente de validation
L'instruction MODIFY est utilisée pour mettre à jour un jeu de données maître (Inventory) en fonction des valeurs contenues dans un jeu de données de transaction (InventoryAdd). Les observations sont appariées par la variable 'partNumber'. Si une observation correspondante est trouvée dans le maître, elle est mise à jour (stock et prix), et la date de réception est actualisée. Si une observation du jeu de données de transaction n'existe pas dans le maître, elle est ajoutée comme une nouvelle observation. Le code utilise les variables automatiques _IORC_ et la macro %SYSRC pour gérer les différents scénarios de correspondance.
Analyse des données

Type : CREATION_INTERNE


Les exemples utilisent des données générées (datalines) pour les jeux de données 'Inventory' et 'InventoryAdd'.

1 Bloc de code
PROC SORT / PROC PRINT Data
Explication :
Ce bloc crée les jeux de données 'Inventory' (maître) et 'InventoryAdd' (transaction) avec des données en ligne. Ensuite, il trie les deux jeux de données par 'partNumber' et les affiche pour montrer leur contenu avant toute modification. Cela permet une comparaison claire avec les résultats après l'opération MODIFY.
Copié !
1DATA Inventory;
2 INPUT partNumber $ partName $ stock price receivedDate :date9.;
3 FORMAT receivedDate date9.;
4 DATALINES;
5K89R seal 34 245.00 07JUL2015
6M4J7 sander 98 45.88 20JUN2015
7LK43 filter 121 10.99 19MAY2016
8MN21 brace 43 27.87 10AUG2016
9BC85 clamp 80 9.55 16AUG2016
10NCF3 valve 198 24.50 20MAR2016
11KJ66 cutter 6 19.77 18JUN2016
12UYN7 rod 211 11.55 09SEP2016
13JD03 switch 383 13.99 09JAN2017
14BV1E timer 26 34.50 03AUG2017
15;
16RUN;
17 
18DATA InventoryAdd;
19 INPUT partNumber $ partName $ newStock newPrice;
20 DATALINES;
21AA11 hammer 55 32.26
22BB22 wrench 21 17.35
23BV1E timer 30 36.50
24CC33 socket 7 22.19
25K89R seal 6 247.50
26KJ66 cutter 10 24.50
27;
28RUN;
29 
30PROC SORT DATA=Inventory; BY partNumber; RUN;
31PROC SORT DATA=InventoryAdd; BY partNumber; RUN;
32PROC PRINT DATA=Inventory; title "Inventory"; RUN;
33PROC PRINT DATA=InventoryAdd; title "InventoryAdd"; RUN;
2 Bloc de code
DATA STEP (MODIFY)
Explication :
Ce bloc de code utilise l'instruction MODIFY pour mettre à jour le jeu de données 'Inventory' en utilisant les informations de 'InventoryAdd'.
- `by partNumber;`: Apparie les observations des deux jeux de données par la variable 'partNumber'.
- `select (_iorc_);`: Utilise la variable automatique _IORC_ pour déterminer le résultat de l'appariement.
- `when (%sysrc(_sok))`: Si une correspondance est trouvée (_sok), le stock est augmenté, le prix est mis à jour, la date de réception est définie à aujourd'hui(), et l'observation est remplacée (`replace;`).
- `when (%sysrc(_dsenmr))`: Si aucune correspondance n'est trouvée (_dsenmr), une nouvelle observation est créée avec le nouveau stock, le nouveau prix et la date de réception d'aujourd'hui(), puis ajoutée (`output;`). `_error_=0;` est utilisé pour éviter que le DATA step ne s'arrête en raison d'une erreur.
- `otherwise`: Gère les erreurs d'E/S inattendues.
Après la modification, le jeu de données 'Inventory' est trié et affiché pour montrer les changements.
Copié !
1DATA Inventory;
2 modify Inventory InventoryAdd;
3 BY partNumber;
4 select (_iorc_);
5 when (%sysrc(_sok))DO;
6 stock = stock + newStock;
7 price=newPrice;
8 receivedDate = today();
9 replace;
10 END;
11 when (%sysrc(_dsenmr)) DO;
12 stock=newStock;
13 price=newPrice;
14 receivedDate=today();
15 OUTPUT;
16 _error_=0;
17 END;
18 otherwise DO;
19 put "An unexpected I/O error has occurred.";
20 _error_ = 0;
21 stop;
22 END;
23 END;
24RUN;
25PROC SORT DATA=Inventory;
26 BY partNumber;
27RUN;
28PROC PRINT DATA=Inventory;
29 title "Modified Inventory Data Set Sorted by partNumber";
30RUN;
31QUIT;
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
Stéphanie
Spécialiste Machine Learning et IA.
« Bien que MODIFY puisse fonctionner sans tri préalable dans certains cas spécifiques (accès direct), je recommande vivement de conserver la PROC SORT sur la variable BY comme illustré ici. Cela garantit une performance optimale et une prévisibilité totale du résultat, surtout si votre table maître devient volumineus »