miércoles, 8 de febrero de 2017

Macro para cambio automático permisos tablas SAS

Con frecuencia nos encontramos problemas de acceso a tablas SAS que se deben a los permisos con los que se crea la tabla de forma automática. Es posible que una tabla SAS generada por un usuario no pueda ser accedida por otros.

Habitualmente en un grupo de trabajo hay tablas maestras que deben ser accedidas por todo el equipo, para solucionar este problema de forma  rápida, añadimos una macro de SAS que cambia los permisos de todas las tablas de una librería.



Hay que saber la ruta física de la librería y los permisos actuales. Esto lo obtenemos con un proc contents:

proc contents data=tabsas._ALL_;
run;



Los permisos se dan utilizando el comando X y siguiendo el código rwx: Permisos rwx

%macro permisos_tablas(libreria);

PROC SQL;
create table tablas as (SELECT memname
FROM dictionary.tables WHERE libname= upcase("&libreria") );
quit;

%let dsid = %sysfunc (open(tablas));  
%let nobs = %sysfunc (attrn(&dsid, NOBS));
%if &nobs > 0 %then %do;
%do i = 1 %to &nobs;  
      %let rc = %sysfunc (fetch(&dsid));                                                                                                                                                                                                                                        
      %let tabla = %sysfunc (getvarc(&dsid,1));
      %put Cambiar permisos a tabla: &tabla;
         /* añadir los códigos con los permisos a dar y la ruta física de la librería */
X chmod 664 "/home/ruta_sas/&tabla..sas7bdat";
%end;
%end;
%let rc = %sysfunc (close(&dsid));

%mend;

%permisos_tablas(TABSAS);


Formación SAS



2 comentarios:

  1. Great site for these post and i am seeing the most of contents have useful for my Carrier.Thanks to such a useful information.Any information are commands like to share him.

    SEO Training in Chennai
    Java Training in Chennai

    ResponderEliminar
  2. Thanks Abiya!!..I would like to translate to English all posts..., but I don't have more time....thanks for your comment!!

    ResponderEliminar