Existen varias formas de determinar el número de registros o observaciones en una tabla. Hay van algunas:
Lo podemos hacer dentro de un proc sql
guardando la cuenta de registros de la query en una variable con el comando into
:
proc sql noprint;
select count(*) into :nobs1
from SASHELP.CARS;
quit;
%put &=nobs1;
La segunda opción es con un paso data utilizando el parámetro end
en la tabla de entreda que (en el ejemplo siguiente) asigna un valor True
a «eof» en caso de que se haya llegado al último registro de la misma. En ese momento, en el último registro, si consultamos qué valor toma la variable _N_ y lo guardamos en la variable «nobs2», podremos obtener el número de registros.
data _null_;
set SASHELP.CARS end=eof;
if eof then call symput('nobs2',_N_);
run;
%put &=nobs2;
Utilizando un stream de datos tenemos un atributo que podemos consultar, NOBS, que nos da el valor que estamos buscando. NOBS da como resultado el número de registros tras el where que hayamos aplicado a la tabla. Si queremos obtener el número de registros sin teneer en cuenta los filtros podemos utilizar NLOBS.
%let dsid = %sysfunc(open(SASHELP.CARS));
data _null_;
%let nobs3a =%sysfunc(attrn(&dsid,NOBS));
%let nobs3b =%sysfunc(attrn(&dsid,NLOBS));
run;
%let rc = %sysfunc(close(&dsid));
%put &=nobs3a;
%put &=nobs3b;
Existe también el atributo NVAR que indica el número de variables.
La última opción que se me ocurre es utilizando el proc contents
para utilizar el campo NOBS de la tabla de salida. Aquí también existe el campo VARNUM cuyo máximo es el número de variables de la tabla. Finalmente leemos el primer registro de la tabla SALIDA con inbos=1
y asignamos el valor a una macrovariable:
proc contents data=SASHELP.CARS
out=SALIDA (keep=nobs) noprint;
run;
proc sql noprint inobs=1;
select nobs into :nobs4
from SALIDA;
quit;
%put &=nobs4;
Platinum
mobile
Upgradable
redundant
Compatible
Tasty
SAS