BookmarkSubscribeRSS Feed
q1234
Calcite | Level 5
Hi,
Please any one can help me to do the following match?
I have two data sets 1 and 2 where I have have the same ID

dataset1
ID ID2
X C25
X C23
G C24
G C5
D C8
D C9

dataset2
ID price1 price 2 price3
X .5 .9 1.4
G .6 .7 .9
D .4 1.3 .8


the expected out put should like this

ID ID2 price1 price2 price3
X C25 .5 .9 1.4
X C23 .5 .9 1.4
G C24 .6 .7 .9
G C5 .6 .7 .9
D.............
My current code after sorting the datasets by ID is as follows

data new;
merge dataset1 dataset2;
by ID;
run;

The problem is that each ID from dataset2 match just one ID from dataset 1.
I need to modify this code in order to give the price information for the ID in datasets 1

Many thanks
3 REPLIES 3
DF
Fluorite | Level 6 DF
Fluorite | Level 6
Some sample data/code for anyone looking at this:

data dataset1;
format id $1.;
format id2 $3.;
infile datalines dsd delimiter=' ';
input id $ id2 $;
datalines;
X C25
X C23
G C24
G C5
D C8
D C9
;
run;

data dataset2;
format id $1.;
format price1 5.2;
format price2 5.2;
format price3 5.2;
infile datalines dsd delimiter=' ';
input id $ price1 price2 price3;
datalines;
X .5 .9 1.4
G .6 .7 .9
D .4 1.3 .8
;
run;

proc sort data=dataset1;
by id;
run;

proc sort data=dataset2;
by id;
run;

data dataset3;
merge dataset1 dataset2;
by id;
run;

Dataset 3 looks like:

D C8 0.40 1.30 0.80
D C9 0.40 1.30 0.80
G C24 0.60 0.70 0.90
G C5 0.60 0.70 0.90
X C25 0.50 0.90 1.40
X C23 0.50 0.90 1.40


In response to your question - I'm not sure what the problem is? The above code, taken from the description of what you've done, seems to do exactly what you need and the output matches your requirement.

The only condition would have to be that dataset2 must be unique by ID, which is the case at least for your sample data.
q1234
Calcite | Level 5
Hi,

Many thanks for your replay. It seems that I have not explained the problem very well.
this is the current format of my 2 datasets for monthly stock price

datasets 1
ID ID2
X C25
X C23
G C24
G C5
D C8
D C9

data dataset
ID price date
X 0.40 01/01/2000
X 0.41 01/02/2000
X 0.42 01/03/2000
X 0.40 01/04/2000
X 0.44 01/05/2000
X 0.39 01/06/2000
X 0.20 01/01/2000
D 0.21 01/02/2000
D 0.20 01/03/2000
D 0.23 01/04/2000
D 0.24 01/05/2000
D 0.26 01/06/2000



I want the out put looks like this

ID2 ID price date
C25 X 0.40 01/01/2000
C25 X 0.41 01/02/2000
C25 X 0.42 01/03/2000
C25 X 0.40 01/04/2000
C25 X 0.44 01/05/2000
C25 X 0.39 01/06/2000
C23 X 0.40 01/01/2000
C23 X 0.41 01/02/2000
C23 X 0.42 01/03/2000
C23 X 0.40 01/04/2000
C23 X 0.44 01/05/2000
C23 X 0.39 01/06/2000
C9 D 0.21 01/01/2000
C8 D 0.21 01/02/2000
C8 D 0.20 01/03/2000
C8 D 0.23 01/04/2000
C8 D 0.24 01/05/2000
C8 D 0.26 01/06/2000
C9 D 0.21 01/01/2000
C9 D 0.21 01/02/2000
C9 D 0.20 01/03/2000
C9 D 0.23 01/04/2000
C9 D 0.24 01/05/2000
C9 D 0.26 01/06/2000

The main thing is to ensure the new datsets includes the ID2 with all the stock price.

In other words, it is match many-to-many, where I have multiple occurence for ID in both the datasets.

I am working on this code right now, but I could not egt what I want. So may you can help to modify this code

(datasets1=data1 dataset2=data2)

_________________________________________________________
data index;
keep from1 to2 ID;
retain from1;
set data1(keep= ID);
by ID;
if first.ID then from1=_N_;
if last.ID then do;
to2=_N_;
output;
end;
run;

data finalmatch;
merge data2 (IN=in_lhs)
index (IN=in_ndx);
by ID;
if in_lhs and in_ndx;
Do from_to=from1 to to2;
set data1 point=from_to;
output;
end;
run;
___________________________



Many thanks Message was edited by: q1234
AmarMundankar
Calcite | Level 5
Hi ,
You can try the following if you can use the PROC SQL for your solution.

data ds1;
input ID $ ID2 $;
cards;
X C25
X C23
G C24
G C5
D C8
D C9
;
data ds2;
input ID $ price1 price2 price3;
cards;
X .5 .9 1.4
G .6 .7 .9
D .4 1.3 .8
;
proc sql;
create table ds3 as
select * from ds1,ds2 where ds1.id = ds2.id;
quit;

Thanks,
Amar Mundankar.

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
  • 3 replies
  • 712 views
  • 0 likes
  • 3 in conversation