Online File

How to use this page


Rick Aster: Professional SAS Programming Shortcuts: Contents

Chapter 45
Program
Linear interpolation


PROC SORT DATA=SERIES;
   BY SEQ;
RUN;

DATA BEFORE (KEEP=SEQ BEFORE_SEQ BEFORE_V);
   SET SERIES;
   RETAIN BEFORE_SEQ BEFORE_V;
   IF V <= .Z THEN DO;
      IF BEFORE_SEQ THEN OUTPUT;
      END;
   ELSE DO;
      BEFORE_SEQ = SEQ;
      BEFORE_V = V;
      END;
RUN;

PROC SORT DATA=SERIES OUT=REVERSE;
   BY DESCENDING SEQ;
RUN;
DATA AFTER (KEEP=SEQ AFTER_SEQ AFTER_V);
   SET REVERSE;
   RETAIN AFTER_SEQ AFTER_V;
   IF V <= .Z THEN DO;
      IF AFTER_SEQ THEN OUTPUT;
      END;
   ELSE DO;
      AFTER_SEQ = SEQ;
      AFTER_V = V;
      END;
RUN;
PROC SORT DATA=AFTER;
   BY SEQ;
RUN;

DATA INTERPOL (KEEP=SEQ V SOURCE);
   MERGE SERIES BEFORE AFTER;
   BY SEQ;
   IF V > .Z THEN DO;
      SOURCE = 'A'; * Actual;
      OUTPUT;
      END;
   ELSE IF BEFORE_V > .Z AND AFTER_V > .Z THEN DO;
      SOURCE = 'I'; * Interpolated;
      V = BEFORE_V + (AFTER_V - BEFORE_V)*
          (SEQ - BEFORE_SEQ)/(AFTER_SEQ - BEFORE_SEQ);
      OUTPUT;
      END;
   ELSE DO;
      SOURCE = 'X'; * Not available;
      V = .;
      OUTPUT;
      END;
RUN;  
TITLE1 'Interpolation'; 
PROC PRINT NOOBS HEADING=H;
RUN;

 O /\

Global
Statements

RICK ASTER

SAS

BOOKS

Tech | Dictionary

Download | Rastinate

Rick Aster

Professional SAS Programming Shortcuts

Contents/Online Files

Corrections

Catalog Page