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!
%macro getautos(out=paths);
data &out ( keep = path ) ;
length q $ 32000 temp $ 300 var path $ 255 ;
q = getoption ( "sasautos" ) ;
*-- remove surrounding (), and internal quotes;
if index ( q , "(" ) then
q = left(translate ( q , " " , "()'\"" )) ;
do while ( 1 ) ;
temp = scan ( q || "***" , 1 , "() " ) ;
if temp = "***" then leave ;
q = left(substr ( q , length ( temp ) + 1)) ;
if temp =: "!" then
do ;
var = scan ( temp , 1 , "!/\ " ) ;
temp = tranwrd ( temp , '!' || trim(var)
, sysget(trim(var)) ) ;
end ;
*-- do tilda expansion. Works for ~/ and ~user/ where user is
the current user;
if temp =: "~" & symget('sysscp') ^= 'WIN' then
do ;
var = scan ( temp , 1 , "~/\" ) ; put var=;
home = sysget('HOME'); put home=;
if var = ' '
then temp = tranwrd( temp, '~', sysget('HOME'));
else do;
userid = sysget('USER'); put userid=;
temp = tranwrd( temp, '~' || trim(userid), sysget('HOME'));
end;
end ;
*-- Check for a fileref;
path = pathname ( temp ) ;
if path = " " then path = temp ;
if index ( path , "(" ) then
do ;
q = trim(left(translate(path, " ", "()'\"""))) || " " || trim ( q ) ;
end ;
else
if path ^= "***" then
output ;
end ;
run ;
%mend;
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
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!
%getautos();
proc print data = paths ; run ;
1
%getautos();
2
PROC PRINTDATA = 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!
data _null_;
file print;
length sasautos $32000 sasroot $200;
sasroot = sysget('SASROOT');
put 'SASROOT:' sasroot=;
sasautos = getoption('sasautos');
put sasautos=;
sasautos = compbl(sasautos);
put sasautos=;
sasautos = compress(sasautos, '("'')');
put 'SASAUTOS:' sasautos=;
run;
1
DATA _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.
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.