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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
DATA ScoreR;
SET Score (RENAME=(Score=ScoreR ID=IDR) WHERE =(MYV="ABC"));
RUN;
DATA ScoreNoRC;
SET Score (RENAME=(Score=ScoreNoR ID=IDNOR) WHERE =(MYV="DEF"));
RUN;
PROC SORT DATA=ScoreNoR;
BY IDNOR;
RUN;
DATA ScoreNoR_d;
SET ScoreNoR;
DistCol = compress('d' || _N_);
RUN;
DATA DistMatrix (KEEP= IDR d1-d3551);
LENGTH ScoreNoR 8;
LENGTH IDNOR 8;
IF _N_= 1 THEN DO;
DECLARE hash h(dataset: "ScoreNoR_d", ordered: 'ascending');
DECLARE hiter iter('h');
h.defineKey('IDNOR');
h.defineData('ScoreNoR', 'IDNOR');
h.defineDone();
CALL missing(IDNOR, ScoreNoR);
END;
SET ScoreR;
ARRAY dis(*) d1-d3551;
rc=iter.first();
IF (rc=0) THEN i=1;
DO WHILE (rc = 0);
dis(i)= abs(ScoreR - ScoreNoR);
i+1;
rc = iter.next();
IF (rc~=0) THEN OUTPUT;
END;
RUN;
/* c'est l'étape ci dessous qui ne finit pas */
PROC ASSIGN DATA=DistMatrix OUT=Result;
cost d1-d3551;
ID IDR;
RUN;
/* les étapes suivantes n'ont donc jamais pu être testées */
PROC PRINT DATA=Result;
SUM _fcost_;
RUN;
PROC SQL;
CREATE TABLE MatchedOpt AS
SELECT b.IDNOR AS IDSelectedControl, a.IDR AS IDTreatment
FROM Result a left join ScoreNoR_d b
on a._ASSIGN_ = b.DistCol;
QUIT; |
Partager