BookmarkSubscribeRSS Feed
chemicalab
Fluorite | Level 6

Hi all,

I found this interesting macro at a paper for imputing missing values using the nearest neighbor technique, my problem is that this macro contains a part done with proc iml , a procedure that i dont have in my sas base,

Ho would be possible to lets say translate it into normal code script?

Kind regards and thnx in advance, the macro is:

%MACRO NNI(INDATA=, /*INPUT DATA SET(INCLUDING LIBRARY NAME) */

MISSVAR=, /*INPUT SINGLE VARIABLE WITH MISSING DATA*/

RESPVAR=, /*RESPONSE VARIABLE*/

IDVAR=, /*SUBJECT VARIABLE*/

OUTDATA= /*OUTPUT DATA SET WITH COMPLETE DATA*/

);

DATA OBSY_MISSX;

SET &INDATA;

IF &MISSVAR=.;

KEEP &IDVAR &RESPVAR;

RUN;

PROC MEANS DATA=&INDATA N NMISS NOPRINT;

VAR &MISSVAR;

OUTPUT OUT=OBSN N=OBSX NMISS=MISSX;

RUN;

DATA _NULL_;

SET OBSN;

CALL SYMPUT('OBSN',OBSX);

CALL SYMPUT('MISSN',MISSX);

RUN;

DATA SIMDATA_NOMISS;

SET &INDATA;

IF &MISSVAR NE .;

RUN;

PROC IML;

USE SIMDATA_NOMISS;

READ ALL VAR {&MISSVAR} INTO XMAT;

READ ALL VAR {&RESPVAR} INTO YMAT;

6

USE OBSY_MISSX;

READ ALL VAR {&IDVAR &RESPVAR} INTO MISSMAT;

TXMAT=T(XMAT);

TYMAT=T(YMAT);

DISTANCE=J(&MISSN,&OBSN,.);

MIND=J(&MISSN,1,.);

MISSVAR=J(&MISSN,&OBSN,.);

IMP=J(&MISSN,1,.);

DO I = 1 TO &MISSN;

DO J = 1 TO &OBSN;

DISTANCE[I,J]=ABS(MISSMAT[I,2]-TYMAT[,J]);

END;

MIND[I,]=MIN(DISTANCE[I,]);

END;

DO I = 1 TO &MISSN;

DO J = 1 TO &OBSN;

IF DISTANCE[I,J]=MIND[I,] THEN MISSVAR[I,J]=TXMAT[,J];

END;

IMP[I,]=MISSVAR[I,:];

END;

CNAME={"&IDVAR" "&RESPVAR" "&MISSVAR"};

IMPX=MISSMAT||IMP;

CREATE NNI FROM IMPX[C=CNAME];

APPEND FROM IMPX;

QUIT;

DATA &OUTDATA;

MERGE &INDATA NNI;

BY &IDVAR;

RUN;

%MEND;

2 REPLIES 2
Rick_SAS
SAS Super FREQ

This is better asked in the DATA step forum.  You can use PROC DISTANCE to find the distance between obs.

chemicalab
Fluorite | Level 6

Thank you for the clarification, will check that

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

What is Bayesian Analysis?

Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 2 replies
  • 720 views
  • 0 likes
  • 2 in conversation