user3508597
user3508597

Reputation: 21

Outputting the top 10% in SAS

How can I limit the number of observations that are output in SAS to the top 10%? I know about the obs= function, but I haven't been able to figure out how to make the obs= lead to a percentage.

Thanks in advance!

Upvotes: 2

Views: 1589

Answers (1)

Joe
Joe

Reputation: 63424

As far as I know there's not a direct way to do what you're asking. You could pretty easily write a macro to do this, though.

Assuming you're asking to view the first 10% of records in a PROC PRINT, you could do something like this.

%macro top10pct(lib=WORK,dataset=);
proc sql noprint;
select max(ceil(0.1*nlobs)) into :_nobs 
from dictionary.tables
where upcase(libname)=upcase("&lib.") and upcase(memname)=upcase("&dataset.");
quit;

proc print data=&lib..&dataset.(obs=&_nobs.);
run;
%mend top10pct;

dictionary.tables has all of the PROC CONTENTS information available to it, including the number of logical observations (NLOBS). This number is not 100% guaranteed to be accurate if you've been doing things to the dataset like deleting observations in SQL, but for SAS datasets this is almost always accurate, or close enough. For RDBMS tables this may be undefined or may not be accurate.

Upvotes: 1

Related Questions