El script no lee datos externos. Genera una tabla de datos llamada 'paths' en la librería WORK. El contenido de esta tabla se deriva del valor de la opción del sistema SAS 'SASAUTOS'.
1 Bloque de código
DATA STEP Data
Explicación : Este bloque define la macro `%getautos`. Utiliza un paso DATA para procesar la cadena de caracteres obtenida a través de `GETOPTION('sasautos')`. La lógica recorre la cadena, extrae cada ruta utilizando la función `SCAN`, gestiona las comillas y realiza sustituciones para las variables de entorno (mediante `SYSGET`) y la tilde (`~`). La función `PATHNAME` se utiliza para resolver los filerefs. Cada ruta válida se añade a la tabla de salida especificada por el parámetro `out`.
¡Copiado!
%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
Explicación : Este bloque ejecuta la macro `%getautos` con sus parámetros predeterminados, lo que crea la tabla `work.paths`. Luego, se utiliza `PROC PRINT` para mostrar el contenido de esta tabla resultante en la ventana de salida.
¡Copiado!
%getautos();
proc print data = paths ; run ;
1
%getautos();
2
PROC PRINTDATA = paths ; RUN ;
3 Bloque de código
DATA STEP
Explicación : Este paso `_NULL_` no tiene como objetivo crear una tabla SAS. Utiliza una instrucción `FILE PRINT` para escribir información en la salida estándar (o en el log). Recupera y muestra el valor de la variable de entorno `SASROOT` a través de `SYSGET`, y luego el valor bruto de la opción `SASAUTOS`. Luego realiza algunas manipulaciones de cadenas (`COMPBL`, `COMPRESS`) sobre el valor de `SASAUTOS` y muestra los resultados.
¡Copiado!
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;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Documentación relacionada
Aucune documentation spécifique pour cette catégorie.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.