How to detect how many observations in a dataset (or if it is empty), in SAS?

后端 未结 7 1223
慢半拍i
慢半拍i 2020-11-29 04:47

I wonder if there is a way of detecting whether a data set is empty, i.e. it has no observations. Or in another saying, how to get the number of observations in a specific d

7条回答
  •  渐次进展
    2020-11-29 05:30

    Here's the more complete example that @cmjohns was talking about. It will return 0 if it is empty, -1 if it is missing, and has options to handle deleted observations and where clauses (note that using a where clause can make the macro take a long time on very large datasets).

    Usage Notes:

    This macro will return the number of observations in a dataset. If the dataset does not exist then -1 will be returned. I would not recommend this for use with ODBC libnames, use it only against SAS tables.

    Parameters:

    • iDs - The libname.dataset that you want to check.
    • iWhereClause (Optional) - A where clause to apply
    • iNobsType (Optional) - Either NOBS OR NLOBSF. See SASV9 documentation for descriptions.

    Macro definition:

    %macro nobs(iDs=, iWhereClause=1, iNobsType=nlobsf, iVerbose=1);
      %local dsid nObs rc;
    
      %if "&iWhereClause" eq "1" %then %do;
        %let dsID = %sysfunc(open(&iDs));
      %end;
      %else %do;
        %let dsID = %sysfunc(open(&iDs(where=(&iWhereClause))));
      %end;
    
      %if &dsID %then %do;
        %let nObs = %sysfunc(attrn(&dsID,nlobsf));
        %let rc   = %sysfunc(close(&dsID));
      %end;
      %else %do;
        %if &iVerbose %then %do;
          %put WARNING: MACRO.NOBS.SAS: %sysfunc(sysmsg());      
        %end;
        %let nObs  = -1;
      %end;
      &nObs
    %mend;
    

    Example Usage:

    %put %nobs(iDs=sashelp.class);
    %put %nobs(iDs=sashelp.class, iWhereClause=height gt 60);
    %put %nobs(iDs=this_dataset_doesnt_exist);
    

    Results

    19
    12
    -1
    

    Installation

    I recommend setting up a SAS autocall library and placing this macro in your autocall location.

提交回复
热议问题