Veröffentlicht am :
ETL CREATION_INTERNE

Beispiel: Daten in einem SAS-Datensatz ändern

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
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.
Kopiert!
1DATA Inventory;
2 informat receivedDate date9.;
3 INPUT partNumber $ partName $ stock price receivedDate;
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;
2 Codeblock
PROC SORT / PROC PRINT
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!
1PROC SORT DATA=Inventory; BY partNumber; RUN;
2PROC SORT DATA=InventoryAdd; BY partNumber; RUN;
3PROC PRINT DATA=Inventory; title "Inventory"; RUN;
4PROC PRINT DATA=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!
1DATA 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;
26RUN;
27PROC SORT DATA=Inventory;
28 BY partNumber;
29RUN;
30PROC PRINT DATA=Inventory;
31 title "Modified Inventory Data Set Sorted by partNumber";
32RUN;
33QUIT;
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.