1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| data observations;
do ID=1 TO 10000;
x1 = RAND('NORMAL',0,1);
x2 = RAND('NORMAL',0,1);
x3 = RAND('NORMAL',0,1);
output;
end;
run;
%macro listOfKNN (obser , target, K, nameOutput);
%Let dim = %eval(%SYSFUNC(count(&target,%NRSTR( )))+1) ;
%let ttt =;
%DO ii = 1 %TO &dim;
%let ttt = &ttt.(x&ii.-(%scan(&target,&ii," ")))**2;
%IF &ii NE &dim %THEN
%let ttt = &ttt.+;
%END;
proc sql noprint ;
create table &nameOutput as
select distinct *, sqrt(&ttt)as distance
from &obser
order by distance;
quit;
data &nameOutput;
set &nameOutput (obs=&K);
drop distance;
run;
%mend listOfKNN;
%listOfKNN( obser = observations,
target = 0.5 1 1,
K = 5,
nameOutput = out
); |
Partager