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.
PROC PRINTDATA=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!
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;
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.