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.
PROC PRINTDATA=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!
data Inventory;
modify Inventory InventoryAdd;
by partNumber;
select (_iorc_);
when (%sysrc(_sok))do;
stock = stock + newStock;
price=newPrice;
receivedDate = today();
replace;
end;
when (%sysrc(_dsenmr)) do;
stock=newStock;
price=newPrice;
receivedDate=today();
output;
_error_=0;
end;
otherwise do;
put "An unexpected I/O error has occurred.";
_error_ = 0;
stop;
end;
end;
run;
proc sort data=Inventory;
by partNumber;
run;
proc print data=Inventory;
title "Modified Inventory Data Set Sorted by partNumber";
run;
quit;
1
DATA 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;
24
RUN;
25
PROC SORTDATA=Inventory;
26
BY partNumber;
27
RUN;
28
PROC PRINTDATA=Inventory;
29
title "Modified Inventory Data Set Sorted by partNumber";
30
RUN;
31
QUIT;
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.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.