Die Dokumentation erläutert die Verwendung der Anweisung `MODIFY` zur Verwaltung von Bestandsaktualisierungen. Sie beschreibt detailliert, wie der `DATA Step` mit den Datensätzen `Inventory` (Master) und `InventoryAdd` (Transaktionen) interagiert. Durch die Verwendung der automatischen Variablen `_IORC_` mit dem Makro `%SYSRC` unterscheidet der Code zwischen bestehenden Beobachtungen (`_SOK`) und neuen (`_DSENMR`). Für bestehende Beobachtungen aktualisiert die Anweisung `REPLACE` die Lagerbestände und Preise. Für neue Beobachtungen fügt die Anweisung `OUTPUT` diese dem Master-Datensatz hinzu. Die Flexibilität von `MODIFY` wird für seine Fähigkeit hervorgehoben, einen Datensatz zu ändern, ohne einen neuen zu erstellen, während gleichzeitig eine explizite Verwaltung der Aktionen (REPLACE oder OUTPUT) bei Verwendung dieser Anweisungen erforderlich ist.
Datenanalyse
Type : CREATION_INTERNE
Die Beispiele verwenden generierte Daten (Datalines), um die Datensätze 'Inventory' und 'InventoryAdd' zu erstellen.
1 Codeblock
DATA Step Data
Erklärung : Dieser Codeblock erstellt die beiden für das Beispiel benötigten Datensätze:
- `Inventory`: Der Hauptdatensatz, der den aktuellen Bestand eines Lagers darstellt. Er enthält Informationen zu Teilenummer, Name, Bestand, Preis und Empfangsdatum.
- `InventoryAdd`: Der Transaktionsdatensatz, der die Aktualisierungen enthält. Er beinhaltet neue Teile, die hinzugefügt werden sollen, Bestandsanpassungen (`newStock`) und Preisänderungen (`newPrice`) für bestehende oder neue Artikel. Die Daten werden mit einem spezifischen Informat eingelesen.
Erklärung : Diese Schritte sortieren die beiden Datensätze nach `partNumber`, um den Abgleich und die Visualisierung von Änderungen zu erleichtern. `PROC PRINT` wird anschließend verwendet, um den ursprünglichen Inhalt der Datensätze `Inventory` und `InventoryAdd` vor jeglichen Änderungen anzuzeigen, was einen klaren Vergleich der Ergebnisse nach dem `MODIFY`-Vorgang ermöglicht.
Kopiert!
proc sort data=Inventory; by partNumber; run;
proc sort data=InventoryAdd; by partNumber; run;
proc print data=Inventory; title "Inventory"; run;
proc print data=InventoryAdd; title "InventoryAdd"; run;
1
PROC SORTDATA=Inventory; BY partNumber; RUN;
2
PROC SORTDATA=InventoryAdd; BY partNumber; RUN;
3
PROC PRINTDATA=Inventory; title "Inventory"; RUN;
4
PROC PRINTDATA=InventoryAdd; title "InventoryAdd"; RUN;
3 Codeblock
DATA Step (MODIFY)
Erklärung : Dieser Codeblock verwendet die Anweisung `MODIFY`, um den Datensatz `Inventory` basierend auf den Informationen aus dem Datensatz `InventoryAdd` zu aktualisieren. Die Anweisung `BY partNumber` stellt den Abgleich der Beobachtungen sicher. Die Klausel `SELECT (_IORC_)` behandelt zwei Szenarien:
1. Wenn eine passende Beobachtung gefunden wird (`%SYSRC(_SOK)`), werden die Werte für `stock`, `price` und `receivedDate` aktualisiert, und `REPLACE` schreibt die geänderte Beobachtung. Das `receivedDate` wird aktualisiert, da selbst bei einem bestehenden Artikel ein neuer Bestand eingegangen ist.
2. Wenn keine passende Beobachtung gefunden wird (`%SYSRC(_DSENMR)`), wird eine neue Beobachtung mit den Werten von `InventoryAdd` erstellt, und `OUTPUT` fügt sie dem Datensatz `Inventory` hinzu. `_ERROR_=0` wird verwendet, um Fehlermeldungen im Log für neue Beobachtungen zu unterdrücken.
Ein `OTHERWISE`-Block ist enthalten, um unerwartete E/A-Fehler zu behandeln. Schließlich wird der Datensatz `Inventory` sortiert und angezeigt, um die Änderungen zu demonstrieren.
Kopiert!
data Inventory;
modify Inventory InventoryAdd;
by partNumber;
select (_iorc_);
/*** The observation exists in the master data set */
when (%sysrc(_sok))do;
stock = stock + newStock;
price=newPrice;
receivedDate = today();
replace;
end;
/*** The observation does not exist in the master data set*/
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
/*** The observation exists in the master data set */
6
when (%sysrc(_sok))DO;
7
stock = stock + newStock;
8
price=newPrice;
9
receivedDate = today();
10
replace;
11
END;
12
/*** The observation does not exist in the master data set*/
13
when (%sysrc(_dsenmr)) DO;
14
stock=newStock;
15
price=newPrice;
16
receivedDate=today();
17
OUTPUT;
18
_error_=0;
19
END;
20
otherwise DO;
21
put "An unexpected I/O error has occurred."
22
_error_ = 0;
23
stop;
24
END;
25
END;
26
RUN;
27
PROC SORTDATA=Inventory;
28
BY partNumber;
29
RUN;
30
PROC PRINTDATA=Inventory;
31
title "Modified Inventory Data Set Sorted by partNumber";
32
RUN;
33
QUIT;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.