In your macro call you asked the macro to put the count into a macro variable named SALESCOUNT. If you want to use SALESCOUNT after the macro ends then make sure to define it BEFORE calling the macro.
%let salescount=unknown;
%counts(userid, salescount, customers)
%put &=salescount;
You named the parameter COUNT, but I would think a name like MVAR or MVARNAME would have been better. It would make it clearer how the parameter is going to be used. You can make the macro smart enough to force the macro variable into the global symbol table when it does not already exist.
%macro counts (varname, mvarname, dsname);
%if not %symexist(&mvarname) %then %global &mvarname;
proc sql;
select count(distinct &varname) format=32. into :&mvarname trimmed
from &dsname;
quit;
%mend counts;
%counts(dsname=customers,varname=userid, mvarname=salescount)
... View more