Online File

How to use this page


Rick Aster: Professional SAS Programming Shortcuts: Contents

Chapter 81
Program
Name matching


*
   Normalize East names.
*;
DATA WORK.EASTTEXT;
   SET EAST.LIST;
   LENGTH NAMEEQV ALPHA $ 32;
   ARRAY WORD{10} $ 16;
   ALPHA = COMPRESS(UPCASE(NAME), "'.");
   ALPHA = TRANWRD(ALPHA, '&', ' AND ');
   ALPHA = TRANWRD(ALPHA, '+', ' AND ');
   ALPHA = TRANSLATE(ALPHA, ' ', "!(),/:?-");
   ALPHA = LEFT(COMPBL(ALPHA));

   DO I = 1 TO DIM(WORD);
      WORD{I} = SCAN(ALPHA, I, ' ');
      END;
   NAMEEQV = '';
   DO I = 1 TO DIM(WORD);
      FROM = WORD{I};
      IF FROM = '' THEN LEAVE;
      * Remove numbers. ;
      IF I > 1 THEN 
          IF NOT VERIFY(FROM, '0123456789. ') THEN FROM = '';
      * Substitute word from thesaurus. ;
      SET MAIN.NAMETHES KEY=FROM/UNIQUE;
      IF _IORC_ THEN DO; * Not found. ;
         _IORC_ = 0;
         _ERROR_ = 0;
         END;
      ELSE WORD{I} = TO;
      IF NAMEEQV = '' THEN NAMEEQV = WORD{I};
      ELSE NAMEEQV = TRIM(NAMEEQV) || ' ' || WORD{I};
      END;
RUN;
PROC SORT DATA=WORK.EASTTEXT;
   BY NAMEEQV ALPHA NAME;
RUN;

*
   Normalize West names.
*;
DATA WORK.WESTTEXT;
   SET WEST.LIST;
   LENGTH NAMEEQV ALPHA $ 32;
   ARRAY WORD{10} $ 16;
   ALPHA = COMPRESS(UPCASE(NAME), "'.");
   ALPHA = TRANWRD(ALPHA, '&', ' AND ');
   ALPHA = TRANWRD(ALPHA, '+', ' AND ');
   ALPHA = TRANSLATE(ALPHA, ' ', "!(),/:?-");
   ALPHA = LEFT(COMPBL(ALPHA));

   DO I = 1 TO DIM(WORD);
      WORD{I} = SCAN(ALPHA, I, ' ');
      END;
   NAMEEQV = '';
   DO I = 1 TO DIM(WORD);
      FROM = WORD{I};
      IF FROM = '' THEN LEAVE;
      * Remove numbers. ;
      IF I > 1 THEN 
          IF NOT VERIFY(FROM, '0123456789. ') THEN FROM = '';
      * Substitute word from thesaurus. ;
      SET MAIN.NAMETHES KEY=FROM/UNIQUE;
      IF _IORC_ THEN DO; * Not found. ;
         _IORC_ = 0;
         _ERROR_ = 0;
         END;
      ELSE WORD{I} = TO;
      IF NAMEEQV = '' THEN NAMEEQV = WORD{I};
      ELSE NAMEEQV = TRIM(NAMEEQV) || ' ' || WORD{I};
      END;
RUN;
PROC SORT DATA=WORK.WESTTEXT;
   BY NAMEEQV ALPHA NAME;
RUN;

*
   Merge and print matches.
*;
DATA WORK.MATCH;
   MERGE
       WORK.EASTTEXT (IN=IN1 RENAME=(ID=ID1 NAME=NAME1 ALPHA=ALPHA1))
       WORK.WESTTEXT (IN=IN2 RENAME=(ID=ID2 NAME=NAME2 ALPHA=ALPHA2))
       ;
   BY NAMEEQV;
   IF IN1 AND IN2;
RUN;
TITLE1 'Equivalent Names';
PROC PRINT DATA=WORK.MATCH HEADING=HORIZONTAL;
   ID ID1 ID2;
   VAR NAMEEQV NAME1 NAME2;
RUN;

 O /\

Global
Statements

RICK ASTER

SAS

BOOKS

Tech | Dictionary

Download | Rastinate

Rick Aster

Professional SAS Programming Shortcuts

Contents/Online Files

Corrections

Catalog Page