Pfade aus der SASAUTOS-Option extrahieren

Dieser Code ist auch verfügbar auf: English Español Deutsch Français
Schwierigkeitsgrad
Anfänger
Veröffentlicht am :
Dieses Skript definiert und führt ein Makro namens `%getautos` aus. Dieses Makro liest den Wert der Systemoption `SASAUTOS`, die eine Liste von Pfaden enthält, in denen SAS© nach Makros sucht. Der Code analysiert diese Zeichenfolge, um jeden einzelnen Pfad zu extrahieren. Er behandelt verschiedene Fälle, wie z.B. Pfade in Anführungszeichen, die Substitution von Umgebungsvariablen (präfixiert mit `!`) und die Expansion der Tilde (`~`) für persönliche Verzeichnisse unter Unix/Linux. Das Makro erzeugt eine Ausgabetabelle (`work.paths` standardmäßig), die die Liste der extrahierten Pfade enthält. Das Skript wird beendet, indem das Makro ausgeführt und das Ergebnis angezeigt wird, sowie der Rohwert von `SASAUTOS` und `SASROOT` ausgegeben wird.
Datenanalyse

Type : CREATION_INTERNE


Das Skript liest keine externen Daten. Es generiert eine Datentabelle namens 'paths' in der Bibliothek WORK. Der Inhalt dieser Tabelle leitet sich vom Wert der SAS-Systemoption 'SASAUTOS' ab.

1 Codeblock
DATA STEP Data
Erklärung :
Dieser Block definiert das Makro `%getautos`. Es verwendet einen DATA-Schritt, um die Zeichenfolge zu verarbeiten, die über `GETOPTION('sasautos')` erhalten wurde. Die Logik durchläuft die Zeichenfolge, extrahiert jeden Pfad mit der Funktion `SCAN`, behandelt Anführungszeichen und führt Substitutionen für Umgebungsvariablen (über `SYSGET`) und die Tilde (`~`) durch. Die Funktion `PATHNAME` wird verwendet, um Filerefs aufzulösen. Jeder gültige Pfad wird der Ausgabetabelle hinzugefügt, die durch den Parameter `out` angegeben wird.
Kopiert!
1%macro getautos(out=paths);
2 DATA &out ( keep = path ) ;
3 LENGTH q $ 32000 temp $ 300 var path $ 255 ;
4 q = getoption ( "sasautos" ) ;
5 
6 *-- remove surrounding (), and internal quotes;
7 IF index ( q , "(" ) THEN
8 q = left(translate ( q , " " , "()'\"" )) ;
9 
10 DO while ( 1 ) ;
11 
12 temp = scan ( q || "***" , 1 , "() " ) ;
13 
14 IF temp = "***" THEN leave ;
15 
16 q = left(substr ( q , LENGTH ( temp ) + 1)) ;
17 
18 IF temp =: "!" THEN
19 DO ;
20 var = scan ( temp , 1 , "!/\ " ) ;
21 temp = tranwrd ( temp , '!' || trim(var)
22 , sysget(trim(var)) ) ;
23 END ;
24 
25 *-- do tilda expansion. Works for ~/ and ~user/ where user is
26 the current user;
27 IF temp =: "~" & symget('sysscp') ^= 'WIN' THEN
28 DO ;
29 var = scan ( temp , 1 , "~/\" ) ; put var=;
30 home = sysget('HOME'); put home=;
31 if var = ' '
32 then temp = tranwrd( temp, '~', sysget('HOME'));
33 else do;
34 userid = sysget('USER'); put userid=;
35 temp = tranwrd( temp, '~' || trim(userid), sysget('HOME'));
36 end;
37 end ;
38 
39 *-- Check for a fileref;
40 path = pathname ( temp ) ;
41 if path = " " then path = temp ;
42 
43 if index ( path , "(" ) then
44 do ;
45 q = trim(left(translate(path, " ", "()'\"""))) || " " || trim ( q ) ;
46 end ;
47 else
48 if path ^= "***" THEN
49 OUTPUT ;
50 END ;
51 RUN ;
52%mend;
2 Codeblock
PROC PRINT
Erklärung :
Dieser Block führt das Makro `%getautos` mit seinen Standardparametern aus, wodurch die Tabelle `work.paths` erstellt wird. Anschließend wird `PROC PRINT` verwendet, um den Inhalt dieser resultierenden Tabelle im Ausgabefenster anzuzeigen.
Kopiert!
1%getautos();
2PROC PRINT DATA = paths ; RUN ;
3 Codeblock
DATA STEP
Erklärung :
Dieser `_NULL_`-Schritt dient nicht dazu, eine SAS-Tabelle zu erstellen. Er verwendet eine `FILE PRINT`-Anweisung, um Informationen in die Standardausgabe (oder das Log) zu schreiben. Er ruft den Wert der Umgebungsvariablen `SASROOT` über `SYSGET` ab und zeigt ihn an, gefolgt vom Rohwert der Option `SASAUTOS`. Anschließend werden einige Zeichenkettenmanipulationen (`COMPBL`, `COMPRESS`) am Wert von `SASAUTOS` durchgeführt und die Ergebnisse angezeigt.
Kopiert!
1DATA _null_;
2 file PRINT;
3 LENGTH sasautos $32000 sasroot $200;
4 sasroot = sysget('SASROOT');
5 put 'SASROOT:' sasroot=;
6 sasautos = getoption('sasautos');
7 put sasautos=;
8 sasautos = compbl(sasautos);
9 put sasautos=;
10 sasautos = compress(sasautos, '("'')');
11 put 'SASAUTOS:' sasautos=;
12 RUN;
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.

Zugehörige Dokumentation

Aucune documentation spécifique pour cette catégorie.