Macros SAS. Asignar permisos en Unix

13 Ene

Hoy os presento una macro especialmente útil para aquellos que trabajéis en con SAS en arquitecturas Unix. En ocasiones generamos tablas SAS que han de ser modificadas por otros usuarios y éstos no disponen de los permisos adecuados para modificarlas. La siguiente macro los que hace es un «change mode», un chmod que modifica los permisos de las tablas SAS de una librería. Por defecto la macro hace un chmod file 777 que significa que owner, group y others tienen permiso de lectura, escritura y ejecución. Si pusieramos chmod 766 significaría que el owner tiene permiso de lectura, escritura y ejecución, y el group y others permiso de lectura y escritura. Chmod 744 significaría que el owner tiene permisos de lectura, escritura y ejecución, y group y others unicamente permisos de lectura.

Los permisos son los 3 dígitos que de izquierda a derecha designan los permisos del owner, group y others. El equivalente para las letras sería:

0 = — = sin acceso
1 = –x = ejecución
2 = -w- = escritura
3 = -wx = escritura y ejecución
4 = r– = lectura
5 = r-x = lectura y ejecución
6 = rw- = lectura y escritura
7 = rwx = lectura, escritura y ejecución

Con esto nuestra macro de SAS sería:


%macro chmod(libname,dataset,permis=777);
  proc sql noprint;
  * OBTENEMOS LA UBICACION DE LA LIBRERIA ;
  select path into: extpath from dictionary.members
  where libname="%UPCASE(&LIBNAME)";
* NUMERO DE DATASETS DE LA LIBRERIA ;
  select count(path) into: cnt from dictionary.members
  where libname="%UPCASE(&LIBNAME)";

* ESTE BUCLE ASIGNA LOS PERMISOS A CADA DATASET, POR DEFECTO
  LA MACRO TIENE 777;
  %if &cnt > 0 %then %do;
  filename chmod pipe "chmod &PERMIS %trim(&extpath)/&dataset..sas7bdat";
  data _null_;
  file chmod;
  run;
  %end;
%mend;

*EJEMPLO DE USO;
libname libref "/sas/datos";
%chmod(libref,*);

Vemos que por defecto la macro asigna permisos 777, con * seleccionamos todos los dataset de la librería.

Espero que sea de utilidad. Por supuesto si tenéis dudas, sugerencias o un trabajo muy bien remunerado… rvaquerizo@analisisydecision.es

3 respuestas a «Macros SAS. Asignar permisos en Unix»

  1. Hola… ¿y no es más sencillo hacer el cambio directamnete desde UNIX?

    chmod -R 777 *.sas7bdat

    debería funcionar. O cosas como

    find . -type f -name «*.sas7bdat» -exec chmod 777 {} \;

    también, si uno es algo geek.

    Usas SAS para realizar operaciones básicas a nivel de sistema operativo es como dispararse al pie.

  2. La idea es integrarlo dentro del código SAS. Es evidente que hay otras opciones. Incluso creo que sería más adecuada dar los permisos directamente al directorio que lo contiene.

    Lo que está claro es que el gestor de la información tiene que tener conocimientos básicos de sistemas y es importante perder el miedo a tenerlos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *