Veröffentlicht am :
Makro CREATION_INTERNE

Erstellen einer FCMP-Funktion zum Schreiben in eine Datei

Dieser Code ist auch verfügbar auf: Español Français
Attention : Dieser Code erfordert Administratorrechte.
Das Makro `%mcf_string2file` generiert eine FCMP-Funktion. Diese Funktion nimmt als Parameter den vollständigen Dateipfad, die zu schreibende Zeichenkette und einen Modus ('CREATE' zum Erstellen/Überschreiben oder 'APPEND' zum Anhängen am Ende). Es verwendet die Low-Level-SAS©-Funktionen (`FILENAME`, `FOPEN`, `FPUT`, `FCLOSE`) zur Dateimanipulation. Das Makro verwaltet auch die Systemoption `CMPLIB`, indem es überprüft, ob die Bibliothek der kompilierten Funktionen bereits deklariert ist und sie bei Bedarf hinzufügt, um die Funktion für nachfolgende DATA-Schritte sofort verfügbar zu machen. Der Parameter `wrap=YES` ermöglicht die Kapselung der Funktionsdefinition in einer `PROC FCMP`.
Datenanalyse

Type : CREATION_INTERNE


Das Skript liest keine Quelldaten. Sein Zweck ist es, eine wiederverwendbare Funktion zu erstellen, die selbst Textdaten, die als Parameter übergeben werden, in eine Datei im Dateisystem schreibt. Die Herkunft der von der Funktion verarbeiteten Daten ist daher extern zu diesem Skript, aber intern zu ihrem eigenen Aufruf.

1 Codeblock
PROC FCMP
Erklärung :
Dieser Block wird ausgeführt, wenn `wrap=YES`. Er verwendet `PROC FCMP`, um eine neue Funktion `mcf_string2file` zu definieren und zu kompilieren. Die Funktion verwendet die SAS-Dateifunktionen (`filename`, `fopen`, `fput`, `fwrite`, `fclose`), um eine Zeichenkette in eine Datei zu schreiben. Sie gibt 0 bei Erfolg und -1 bei einem Fehler zurück (z.B. Datei konnte nicht geöffnet werden).
Kopiert!
1PROC FCMP outlib=&lib..&cat..&pkg;
2 
3function mcf_string2file(filepath $, string $, mode $);
4 IF mode='APPEND' THEN fmode='a';
5 ELSE fmode='o';
6 LENGTH fref $8;
7 rc=filename(fref,filepath);
8 IF (rc ne 0) THEN return( -1 );
9 fid = fopen(fref,fmode);
10 IF (fid = 0) THEN return( -1 );
11 rc=fput(fid, string);
12 rc=fwrite(fid);
13 rc=fclose(fid);
14 rc=filename(fref);
15 return(0);
16endsub;
17 
18 
19QUIT;
2 Codeblock
OPTIONS
Erklärung :
Dieser Makro-Codeblock überprüft, ob die Funktionsbibliothek (`&lib..&cat`) bereits in der Systemoption `CMPLIB` vorhanden ist. Wenn nicht, wird sie dynamisch über `options insert=(CMPLIB=...)` hinzugefügt. Dies stellt sicher, dass die neu erstellte FCMP-Funktion sofort in der SAS-Sitzung verfügbar ist.
Kopiert!
1/* insert the CMPLIB if not already there */
2%let cmpval=%sysfunc(getoption(cmplib));
3%let found=0;
4%DO i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));
5 %let var=%scan(&cmpval,&i,%str( %(%)));
6 %IF &var=&lib..&cat %THEN %let found=1;
7%END;
8%IF &found=0 %THEN %DO;
9 options insert=(CMPLIB=(&lib..&cat));
10%END;
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.