Publicado el :
Manipulación de datos CREATION_INTERNE

Ejemplo: Modificar datos

Este código también está disponible en: Deutsch English Français
En espera de validación
La instrucción MODIFY se utiliza para actualizar un conjunto de datos maestro (Inventory) en función de los valores contenidos en un conjunto de datos de transacción (InventoryAdd). Las observaciones se emparejan por la variable 'partNumber'. Si se encuentra una observación correspondiente en el maestro, se actualiza (existencias y precio) y se actualiza la fecha de recepción. Si una observación del conjunto de datos de transacción no existe en el maestro, se añade como una nueva observación. El código utiliza las variables automáticas _IORC_ y la macro %SYSRC para gestionar los diferentes escenarios de coincidencia.
Análisis de datos

Type : CREATION_INTERNE


Los ejemplos utilizan datos generados (datalines) para los conjuntos de datos 'Inventory' e 'InventoryAdd'.

1 Bloque de código
PROC SORT / PROC PRINT Data
Explicación :
Este bloque crea los conjuntos de datos 'Inventory' (maestro) e 'InventoryAdd' (transacción) con datos en línea. Luego, ordena ambos conjuntos de datos por 'partNumber' y los muestra para evidenciar su contenido antes de cualquier modificación. Esto permite una clara comparación con los resultados después de la operación MODIFY.
¡Copiado!
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 Bloque de código
DATA STEP (MODIFY)
Explicación :
Este bloque de código utiliza la instrucción MODIFY para actualizar el conjunto de datos 'Inventory' usando la información de 'InventoryAdd'.
- `by partNumber;`: Empareja las observaciones de ambos conjuntos de datos por la variable 'partNumber'.
- `select (_iorc_);`: Utiliza la variable automática _IORC_ para determinar el resultado del emparejamiento.
- `when (%sysrc(_sok))`: Si se encuentra una coincidencia (_sok), el stock se incrementa, el precio se actualiza, la fecha de recepción se establece en hoy(), y la observación se reemplaza (`replace;`).
- `when (%sysrc(_dsenmr))`: Si no se encuentra ninguna coincidencia (_dsenmr), se crea una nueva observación con el nuevo stock, el nuevo precio y la fecha de recepción de hoy(), y luego se añade (`output;`). `_error_=0;` se usa para evitar que el paso DATA se detenga debido a un error.
- `otherwise`: Gestiona errores de E/S inesperados.
Después de la modificación, el conjunto de datos 'Inventory' se ordena y se muestra para evidenciar los cambios.
¡Copiado!
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;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Copyright © SAS Institute Inc. All Rights Reserved