Lstown-lers, So, have any of you ever wondered where your subscribers are really coming from? How many from AOL.COM, HOSTNAME.BIGCORP.COM, or WWW.USELESS.EDU? Or if you haven't, did your managers *shudder* ever want to know more than REVIEW BY COUNTRY could give? WHEREFROM_LIST.SAS is a SAS program that takes as input a list of addresses obtained via a REVIEW or GET LISTNAME command, and outputs the hosts where your list has subscribers and the number of subscribers at each host. One list I just tried at my site gave results like: OBS NODE FREQ 1 GWUNIX5.GWU.EDU 1 2 HUD.GOV 1 3 KAMBER.COM 1 4 WPU.FTC.GOV 1 5 AOL.COM 8 6 CCEC.GWU.EDU 9 7 SEAS.GWU.EDU 12 8 GWIS2.CIRC.GWU.EDU 641 It can also provide more information then just useless statistics. The above case shows a list begging me to set to Prime-Time. We've also used it in the past to vet addresses before a mass-mailing to our incoming freshman, picking off mis-entered addresses like AO1.COMM. The program could stand quite a bit of improvements. The section where it writes an edited version of the file back out and reads it back in is only necessary because I'm a lousy SAS programmer, and it doesn't handle either very long or 'funny' addresses (X25, UUCP, & etc.) well. Let me know if you make any improvements... The SAS System is an extremely powerful set of statistical utilities, in very wide use at both educational and industrial sites. Check your systems people to find out if it is installed at your location, and how you can run it. Enjoy! --Jeff Boulier -- Sr. Programmer / Analyst, GW Computer Information & Resource Center *Mihi Adhaerere Deo Bonum Est* /* ============================================================ */ /* WHEREFROM_LIST.SAS Version 1.0 by Jeff Boulier <[log in to unmask]> and Donald Lockley <[log in to unmask]> VM Users: use ' ' instead of '.'s for the FILE statements. */ options ls=72; data new; infile 'YOUR_LIST_NAME_HERE.list'; input address $40.; x=translate (address, ' ', '@'); file 'temp.list'; put x; data newer; length NODE $40; infile 'temp.list' missover; input name $ node $; proc sort ; by node; data newest; set newer; by node; if first.node then FREQ=1; else freq + 1; if last.node then OUTPUT; run; proc sort reverse; by freq; proc print; var node freq; run;