Das Makro arbeitet mit externen Dateien, deren Pfade oder Filerefs als Parameter (`inloc`, `outloc`, `inref`, `outref`) bereitgestellt werden. Es generiert keine internen Daten für die eigene Verarbeitung, sondern manipuliert vorhandene oder zu erstellende Binärdateien.
1 Codeblock
MAKRO DEFINITION
Erklärung : Definition des Makros `%mp_binarycopy` mit seinen Eingabeparametern, einschließlich Dateipfaden (inloc, outloc), Dateireferenzen (inref, outref), Betriebsmodus (CREATE oder APPEND) und einer Ausführungsbedingung (iftrue). Das Makro enthält eine lokale Variable 'mod' und eine frühzeitige Beendigungsbedingung.
Kopiert!
%macro mp_binarycopy(
inloc= /* full path and filename of the object to be copied */
,outloc= /* full path and filename of object to be created */
,inref=____in /* override default to use own filerefs */
,outref=____out /* override default to use own filerefs */
,mode=CREATE
,iftrue=%str(1=1)
)/*/STORE SOURCE*/;
%local mod;
%if not(%eval(%unquote(&iftrue))) %then %return;
1
%macro mp_binarycopy(
2
inloc= /* full path and filename of the object to be copied */
3
,outloc= /* full path and filename of object to be created */
4
,inref=____in /* override default to use own filerefs */
5
,outref=____out /* override default to use own filerefs */
6
,mode=CREATE
7
,iftrue=%str(1=1)
8
)/*/STORE SOURCE*/;
9
%local mod;
10
11
%IF not(%eval(%unquote(&iftrue))) %THEN %return;
2 Codeblock
Vorverarbeitung (Filerefs)
Erklärung : Dieser Abschnitt konfiguriert die Eingabe- und Ausgabe-Filerefs. Falls die Parameter `inref` oder `outref` nicht überschrieben wurden, erstellt das Makro temporäre Filerefs (`____in`, `____out`), die auf die durch `inloc` und `outloc` angegebenen Pfade verweisen. Die Option `lrecl=1048576` definiert die logische Satzlänge, und `&mod` wird dem Ausgabe-Fileref hinzugefügt, wenn der Modus 'APPEND' ist.
Kopiert!
%if &mode=APPEND %then %let mod=mod;
/* these IN and OUT filerefs can point to anything */
%if &inref = ____in %then %do;
filename &inref &inloc lrecl=1048576 ;
%end;
%if &outref=____out %then %do;
filename &outref &outloc lrecl=1048576 &mod;
%end;
1
%IF &mode=APPEND %THEN %let mod=mod;
2
3
/* these IN and OUT filerefs can point to anything */
4
%IF &inref = ____in %THEN %DO;
5
filename &inref &inloc lrecl=1048576 ;
6
%END;
7
%IF &outref=____out %THEN %DO;
8
filename &outref &outloc lrecl=1048576 &mod;
9
%END;
3 Codeblock
DATA STEP
Erklärung : Zentraler Block des Makros, der einen `DATA _null_`-Schritt verwendet. Er liest die Eingabedatei (`infile`) Byte für Byte (`lrecl=1 recfm=n`) und schreibt jedes Byte direkt in die Ausgabedatei (`file`). `sourcechar $char1.` liest ein Zeichen, `format sourcechar hex2.` formatiert es hexadezimal, und `put sourcechar char1.` schreibt es als einzelnes Zeichen, um eine binäre Kopie zu gewährleisten.
Kopiert!
/* copy the file byte-for-byte */
data _null_;
infile &inref lrecl=1 recfm=n;
file &outref &mod recfm=n;
input sourcechar $char1. @code_sas_json/hsdua2304@gmail.com_SAS_Assignment_2.json;
format sourcechar hex2.;
put sourcechar char1. @code_sas_json/hsdua2304@gmail.com_SAS_Assignment_2.json;
run;
put sourcechar char1. @code_sas_json/hsdua2304@gmail.com_SAS_Assignment_2.json;
8
RUN;
4 Codeblock
Nachbearbeitung (Freigabe von Filerefs)
Erklärung : Nach dem Kopiervorgang stellt dieser Abschnitt sicher, dass die vom Makro erstellten temporären Filerefs (`____in`, `____out`) freigegeben werden (`filename ... clear;`), wodurch Namenskonflikte und unnötiger Ressourcenverbrauch vermieden werden.
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.