There are some approaches to get observation number of a
dataset.
I usually use the observation numbers to decide how to
generate a TLG. For example, if there is no data, I would generate a table with
text as “No observation found…”, instead of no output or a blank page.
Mostly, I would use following codes:
%LET dsid =%sysfunc(OPEN(dataset_name));
%LET nobs =%sysfunc(ATTRN(&dsid, NLOBS));
%LET rc =%sysfunc(CLOSE(&dsid));
%LET nobs =%sysfunc(ATTRN(&dsid, NLOBS));
%LET rc =%sysfunc(CLOSE(&dsid));
It should be good enough for me, because I know the dataset will be there. This means, above codes will not work for SAS views or if a dataset does not exist. If I want to put above codes in more general programs, I may check &dsid if the dataset exists.
I can also use SASHELP.VTABLE to fetch dataset information I want. It usually consumes a little more brain energy to get there, for example, I have to deal more details on libname and memname, and maybe more keystrokes.
If I want to know the observation numbers of subset of a dataset, which means a dataset with WHERE statement, it seems that I have to count the observations one by one. Usually, I use following codes:
%LET nobs=0;
DATA _null_;
SET dataset_name (WHERE=(where_statement)) end=eof;
IF eof THEN CALL SYMPUTX("nobs",_n_);
RUN; It is important to have "%let nobs=0;" to initiate macro variable nobs.
No comments:
Post a Comment