Macro SAS. Número de variables de un dataset en una macro

22 Ene

Una macro que nos permite saber el número de variables que tiene un conjunto de datos SAS. Es una petición de una lectora y la macro es análoga a otra que ya pusimos en el blog allá por 2010. Veamos cómo funciona:

%macro numvars(datos);
 %global numvars;
 /*ABRIMOS EL CONJUNTO DE DATOS PARA VER SUS CARACTERISTICAS*/
 %let datosid = %sysfunc(open(&datos));
 /*SI ESTA ABIERTO ENTONCES LA FUNCION ATTRN NOS DA EL NUMERO DE VARIABLES*/
 %if &datosid %then %do;
 %let numvars =%sysfunc(attrn(&datosid,nvars));
 /*CERRAMOS EL CONJUNTO DE DATOS*/
 %let rc = %sysfunc(close(&datosid));%end;
 %mend;
data ejemplo;
 a=1;
 b=2;
 c=3;
 d=4;
 f=5;
 g=6;
 run;
%numvars(ejemplo);
 %put _user_;

Utilizamos las funciones I/O de SAS, en concreto ATTRN que unido a NVARS nos permite saber el número de variables que tiene un dataset, el número de variables lo ponemos en la macrovariable global &numvars..

Saludos.

4 respuestas a «Macro SAS. Número de variables de un dataset en una macro»

  1. Hola buenas tardes.
    Espero me puedan ayudar con una incidencia que tengo en un proceso SAS y la cual no he podido solucionar.

    Actualmente tengo un proyecto llamado TOPN_SAS, este proyecto lo he usado todos los días durante los últimos 10 meses jamas me había dado errores el proyecto, pero desde hace 2 días no he podido ejecutarlo ya que los errores que marca son que algunas variables no se han inicilalizado (uninitialized) pero lo mas extraño es que esas variables si están inicializadas desde una importación que hago de un archivo EXCEL en la cual traigo todos los campos que usa mi proceso y en el programa hace todos los cruces, pero al día de hoy no puedo ejecutarlo ya que algunas tablas de resultados si las llena y otras no las llena y las que no llena es donde están estos campos que dice que no se han inicializado.

    el problema surgió a partir de que me borraron mi configuración de SAS en mi equipo personal pero este mismo código lo ejecuto en otros equipos y no hay ningún tipo de problema, me podrían orientar que pasos puedo seguir para tratar de identificar la causa de los errores y así poder solucionarlo.

    Quedo atento a sus comentarios. Gracias.

Deja una respuesta

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