DATA Step, Macro, Functions and more

When merging two data sets by a variable why all OBS not populated with values

Reply
Super Contributor
Posts: 270

When merging two data sets by a variable why all OBS not populated with values

Dear,

 

I have a question. 

 

I am merging two datasets. why only first OBS is populated in my output data.  Please help. Thank you

 

code:

data data3;
merge data2(in=a) data1(in=b);
by id;
if a;
run;

 

data1

id      value

1         10

2          20

3          30

 

data2

id 

1

1

2

2

 

output getting;

id    val

1     10

1

2     20

2

2

output needed;

id    val

1     10

1      10

2     20

2      20

2     20

 

Super User
Posts: 5,254

Re: When merging two data sets by a variable why all OBS not populated with values

Not thought about this consequence when using the if a; concept.
Not tested but my theory is that for observation 2 there is no corresponding observation in b: hence the missing value.
Regardless I think a simple SQL inner join is better in this situation.
Data never sleeps
Trusted Advisor
Posts: 1,353

Re: When merging two data sets by a variable why all OBS not populated with values

[ Edited ]

I'm using SAS 9.4 with SAS UE on linux.

Attached is the code and result.

 

The code is a copy of your (@knveraraju91 ) post, addaptedf to create test data.

The result is as you wanted.

 

Check your log and code again. It should work.

If not - what SAS version and platform you use ?

Attachment
Super User
Posts: 6,928

Re: When merging two data sets by a variable why all OBS not populated with values

Are you sure that data2 only contains the variable id?

 

Please post the output of proc contents for both datasets.

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
Super User
Posts: 5,071

Re: When merging two data sets by a variable why all OBS not populated with values

The results you are getting would typically occur if your second data set also contained VAL (or is it VALUE?), but with all missing values.  To get rid of it, you can drop it as late as on the MERGE statement:

 

data want;

merge data2 (in=a drop=val) data1;

by id;

if a;

run;

Ask a Question
Discussion stats
  • 4 replies
  • 123 views
  • 2 likes
  • 5 in conversation