Veröffentlicht am :
Datenmanipulation CREATION_INTERNE

Beispiel: Daten ändern

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Die MODIFY-Anweisung wird verwendet, um einen Master-Datensatz (Inventory) basierend auf den Werten in einem Transaktions-Datensatz (InventoryAdd) zu aktualisieren. Die Beobachtungen werden über die Variable 'partNumber' abgeglichen. Wenn eine passende Beobachtung im Master gefunden wird, wird sie aktualisiert (Bestand und Preis), und das Empfangsdatum wird aktualisiert. Wenn eine Beobachtung aus dem Transaktions-Datensatz im Master nicht existiert, wird sie als neue Beobachtung hinzugefügt. Der Code verwendet die automatischen Variablen _IORC_ und das Makro %SYSRC, um verschiedene Abgleichszenarien zu handhaben.
Datenanalyse

Type : CREATION_INTERNE


Die Beispiele verwenden generierte Daten (Datalines) für die Datensätze 'Inventory' und 'InventoryAdd'.

1 Codeblock
PROC SORT / PROC PRINT Data
Erklärung :
Dieser Block erstellt die Datensätze 'Inventory' (Master) und 'InventoryAdd' (Transaktion) mit Inline-Daten. Anschließend werden beide Datensätze nach 'partNumber' sortiert und angezeigt, um ihren Inhalt vor jeglicher Änderung zu zeigen. Dies ermöglicht einen klaren Vergleich mit den Ergebnissen nach der MODIFY-Operation.
Kopiert!
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 Codeblock
DATA STEP (MODIFY)
Erklärung :
Dieser Codeblock verwendet die MODIFY-Anweisung, um den Datensatz 'Inventory' unter Verwendung der Informationen von 'InventoryAdd' zu aktualisieren.
- `by partNumber;`: Gleicht die Beobachtungen der beiden Datensätze nach der Variablen 'partNumber' ab.
- `select (_iorc_);`: Verwendet die automatische Variable _IORC_, um das Ergebnis des Abgleichs zu bestimmen.
- `when (%sysrc(_sok))`: Wenn eine Übereinstimmung gefunden wird (_sok), wird der Bestand erhöht, der Preis aktualisiert, das Empfangsdatum auf heute() gesetzt und die Beobachtung ersetzt (`replace;`).
- `when (%sysrc(_dsenmr))`: Wenn keine Übereinstimmung gefunden wird (_dsenmr), wird eine neue Beobachtung mit dem neuen Bestand, dem neuen Preis und dem heutigen Empfangsdatum erstellt und hinzugefügt (`output;`). `_error_=0;` wird verwendet, um zu verhindern, dass der DATA-Schritt aufgrund eines Fehlers abbricht.
- `otherwise`: Behandelt unerwartete E/A-Fehler.
Nach der Änderung wird der Datensatz 'Inventory' sortiert und angezeigt, um die Änderungen zu zeigen.
Kopiert!
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;
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.
Urheberrechtsinformationen : Copyright © SAS Institute Inc. All Rights Reserved