You can do it with SQL
SELECT count(*) FROM
(SELECT DISTINCT zipcode, StreetAddress, HouseNumber FROM mydata);
This assumes that the StreetAddress variable is typed and spelled consistently. "sue lane" and "sue ln" would be considered different streets by the SQL code. If your data are large, you may want to invest in a program to regularize the StreetAddress field (MelissaData.com has some). You could do some of that in the data step with the perl expressions, but it is messy to address all the possibilities. Just dropping the "lane" or "street" is not sufficient; in Durham, NC, we have "Chapel Hill Rd", "Chapel Hill St", and "Chapel Hill Blvd" within the same ZIP code.
Street names are unique within ZIP code, so you need that for the uniqueness.