Online File
Rick Aster: Professional SAS Programming Shortcuts: Contents
*
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;