%macro utlfdup ( utitle=Print the dups in a table, uobj=utlfdup, /*-------------------------------------*\ | INPUTS TABLE WITH POSSIBLE DUPS | \*-------------------------------------*/ uin1=d:\obj, uinmem11=testdata, /*-------------------------------------*\ | PROCESS | \*-------------------------------------*/ uxkey=name ssn, /* keys for dup selection */ uopts=%str(obs=max ls=133 ps=61), /*-------------------------------------*\ | OUTPUTS | \*-------------------------------------*/ uot1=&uin1, uotmem11=utlfdup1, uflop=01010101 ) / des ="Print the dups in a table"; /* variation of findups macro from SAS-L Adam Hendricks TAD Staffing 425-234-6108 adam@bcsfse.ca.boeing.com http://www.aa.net/ahendrix */ %local utlfdup1; libname uin1 "&uin1"; libname uot1 "&uot1"; proc datasets library=uot1 nolist ; delete utlfdup1; quit; run; options &uopts; %let utlfdup1 = %sysfunc(translate(&uxkey,',',' ')); ?* use comma delimiter for sql */ proc sql; create table uot1.&uotmem11 ( label="table of dups from &uinmem11" ) as select *, count(*) - 1 as dupnum from uin1.&uinmem11 group by &utlfdup1 having count(*) > 1; quit; run; %utltytl ( utitle=&utitle, uobj=&uobj, uin=&uin1 &uinmem11, uot=&uot1 &uotmem11 ); proc print data=uot1.&uotmem11 uniform width=minimum ; run; %mend utlfdup; libname o "d:\obj"; data o.utlfdup0 ( label="create table with duplicate keys" ); input name : $ ssn age hght wght ; cards; rog 123451234 23 76 198 rog 123451234 23 72 198 mary 123451234 24 76 198 sue 123451234 23 66 128 sue 123451234 23 66 128 sue 123451234 23 66 128 mike 123451234 23 76 198 ; run; %utlfdup ( uin1=d:\obj, uinmem11=utlfdup0, uxkey=name ssn age hght wght ); /* use macro below or comment out/ delete invocation */ %MACRO UTLTYTL ( UTITLE=DEFAULT TITLE, UOBJ=UTL01AA, UOT=/POISONS/PERIOD/199506/UTL01AA, UIN=/POISONS/PERIOD/199506/UTL01AB ) / DES="STANDARD TITLE OBJECT ORIENTED"; TITLE1;FOOTNOTE1; PROC SQL ; RESET NOPRINT ; SELECT SCAN(SETTING,1) INTO :UAUTO FROM SASHELP.VOPTION WHERE OPTNAME='SASAUTOS' ; QUIT ; RUN; %LET UAUTO = %COMPRESS(&UAUTO,""); %LET UDTYM=%SYSFUNC(PUTN(%DATETIME,DATETIME13.)); TITLE1 "&UTITLE"; TITLE2 "CODE OBJECT &UOBJ LOCATED IN &UAUTO"; TITLE3 " EXECUTED ON &UDTYM"; TITLE4 " EXECUTED BY &SYSJOBID &SYSENV.GROUND &SYSSCPL SAS&SYSVER"; TITLE5 "IN -&UIN"; TITLE6 "OUT- &UOT"; RUN; %MEND UTLTYTL;