Date: Thu, 25 May 2006 00:55:19 +0000
Reply-To: toby dunn <tobydunn@HOTMAIL.COM>
Sender: "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From: toby dunn <tobydunn@HOTMAIL.COM>
Subject: Re: Point function: something's wrong in my code
In-Reply-To: <200605242342.k4OIVSJC016687@mailgw.cc.uga.edu>
Content-Type: text/plain; format=flowed
Kitty ,
Another solution which is designed to work with the data step would be:
data lookup ( index = ( CaseId ) ) ;
input caseid fid;
cards;
5471290 1
5471292 2
5471294 3
5471296 4
5472960 5
5472966 6
5472990 7
5472992 8
5474030 9
5474032 10
;
run;
data pair;
input caseid1 caseid2 amount;
cards;
5471290 5471294 345
5471292 5472966 6423
5471296 5472992 5500
5472960 5474030 234
5472990 5472992 4532
5474032 5474030 3421
;
run;
data need ;
set Pair ;
set LookUp ( rename = ( CaseId = CaseId1 Fid = Fid1 ) ) Key = CaseId1 ;
set LookUp ( rename = ( CaseId = CaseId2 Fid = Fid2 ) ) Key = CaseId2 ;
run ;
proc print
data = Need ;
run ;
Toby Dunn
From: Kitty Lee <lee.kitty@YAHOO.COM>
Reply-To: Kitty Lee <lee.kitty@YAHOO.COM>
To: SAS-L@LISTSERV.UGA.EDU
Subject: Point function: something's wrong in my code
Date: Wed, 24 May 2006 19:42:37 -0400
Hi. I tried to use the POINT function to look up data. There's something I
missed in my codes.
I began with this master file which has the real caseid and an assigned id
called 'fid'.
data lookup;
input caseid fid;
cards;
5471290 1
5471292 2
5471294 3
5471296 4
5472960 5
5472966 6
5472990 7
5472992 8
5474030 9
5474032 10
;
run;
/*and I have another data 'pair' which pair up cases*/
data pair;
input caseid1 caseid2 amount;
cards;
5471290 5471294 345
5471292 5472966 6423
5471296 5472992 5500
5472960 5474030 234
5472990 5472992 4532
5474032 5474030 3421
;
run;
/*I need to lookup the fid codes from the 'lookup' data. My IDEAL dataset
would look like
caseid1 fid1 caseid2 fid2 amount
5471290 1 5471294 3 345
5471292 2 5472966 6 6423
5471296 4 5472992 8 5500
5472960 5 5474030 9 234
5472990 7 5472992 8 4532
5474032 8 5474030 9 3421
*/
/*I tried the following
*/
data ineed;
retain ;
do until (eof);
set pair end = eof; k1=caseid1; k2=caseid2;
set lookup (rename=(caseid=caseid1 fid = fid1)) point = k1 ;
set lookup (rename=(caseid=caseid2 fid = fid2)) point = k2 ;
output;
end;
stop;
run;
/* but I got the following message in the log
eof=1 caseid1=5474032 caseid2=5474030 amount=3421 k1=5474032 k2=5474030
fid1=. fid2=. _ERROR_=1
_N_=1*/
proc print data=ineed; run;
Obs caseid1 caseid2 amount fid1 fid2
1 5471290 5471294 345 . .
2 5471292 5472966 6423 . .
3 5471296 5472992 5500 . .
4 5472960 5474030 234 . .
5 5472990 5472992 4532 . .
6 5474032 5474030 3421 . .
Can someone kindly point out where I made a mistake?
Thanks!!
K.