Expertentipp:
 

Wussten Sie schon, wie Sie die Anzahl der Zeilen in einer Datei ermitteln können?

Und so geht’s:

SAS Dateien bestehen aus einem beschreibenden Teil, der die Meta-Informationen zur Datei enthält, und dem Datenteil, der die Datenwerte enthält. Im beschreibenden Teil finden Sie detaillierte Informationen über die Datei. Unter anderem

  • der Name der Datei
  • den Dateityp
  • Datum und Uhrzeit der Erstellung
  • Anzahl der Zeilen
  • Anzahl der Variablen 
  • und vieles mehr.

Am schnellsten und effizientesten ermitteln Sie die Anzahl der Zeilen, indem Sie den beschreibenden Teil der Datei auslesen.

Hier einige Beispiele:

Ermitteln der Zeilenanzahl und speichern in der Makrovariable nrows.


/* Vor SAS Version 9*/
data _NULL_;
	if 0 then set sashelp.class nobs=n;
	call symput('nrows',trim(left(put(n,8.))));
	stop;
run;
%put nobs=&nrows;
 
/* SAS Version 9.x und höher: */
data _NULL_;
	if 0 then set sashelp.class nobs=n;
	call symputx('nrows',n);
	stop;
run;
%put nobs=&nrows;

Mit if 0 wird erreicht, dass die dahinterstehenden Anweisungen zur Ausführungszeit nicht ausgeführt werden. In diesem Fall erhält der Compiler durch set sashelp.class Zugriff auf die beschreibenden Informationen der Datei, da er ja den PDV entsprechend anlegen muss. Aber zur Ausführungszeit ist die Bedingung immer falsch, d.h. es werden keine Datenzeilen gelesen.
NOBS ist eine automatische Variable, die die Zeilenanzahl der in der SET-Anweisung angegebenen Datei enthält. Durch nobs = n wird die Zeilenanzahl in der Variable N gespeichert. Die STOP-Anweisung verhindert eine Endlosschleife, da bei der Ausführung ja nie das Ende der Datei erreicht werden kann.

Die beschreibenden Informationen können auch in einem Makro mit Hilfe von DATA STEP Funktionen ermittelt werden:


/* Ermitteln der Zeilenanzahl in einem Makro mit Funktionen */
%macro obscnt(dsn);
	%local nobs dsnid;
	%let nobs=.;

	%* Öffnen der Datei;
	%let dsnid = %sysfunc(open(&dsn));

	%* Wenn Öffnen erfolgreich war:;
	%* Logische Zeilenanzahl (ohne gelöschte Zeilen) abfragen;
%* und in Makrovariable speichern und Datei schließen;
	%if &dsnid %then
		%do;
			%let nobs=%sysfunc(attrn(&dsnid,nlobs));
			%let rc  =%sysfunc(close(&dsnid));
		%end;
	%else
		%do;
			%put Unable to open &dsn - %sysfunc(sysmsg());
		%end;

	%put &=nobs;

	%* Zeilenanzahl zurückgeben ;
	&nobs
%mend obscnt;

/* Aufruf des Makros */

%put Die Datei hat %obscnt(sashelp.class) Zeilen; 

Mit PROC SQL können Sie die SAS Dictionary Tabellen auslesen, um die Zeilenanzahl in eine Makrovariable zu schreiben:


/* Ermitteln der Zeilenanzahl mit PROC SQL und Auslesen der Dictionary Tabellen */
proc sql noprint;
	select nobs into :nobs separated by ' ' 
	from dictionary.tables
	where libname='SASHELP' and memname='CLASS';
quit;
 
%put TNote: nobs=&nobs;

Diese und weitere Tipps erhalten Sie in den Kursen SAS® Programmierung 2: Datenmanagement im Data Step und SAS® Makrosprache 1: Grundlagen.