DATA Step, Macro, Functions and more

Logic behind left join ??

Accepted Solution Solved
Reply
Contributor
Posts: 60
Accepted Solution

Logic behind left join ??

[ Edited ]

Yes I know I should write as below : 

"on a.ManagerID=b.ID;"

but when i'm writting as below how i'm getting the output can someone please explain logic how output calculated 

 

data ds1;
input Name $ ID ManagerID;
cards;
Smith 123 456
Robert 456 .
William 222 456
Daniel 777 222
Cook 383 222
;
run;

proc sql;
select a.*, b.Name as Manager_name from ds1 as a left join ds1 as b
on b.ManagerID=a.ID;
quit;

 

 

Output : 

 

SAS Output

Name ID ManagerID Manager_name
Smith 123 456  
William 222 456 Cook
William 222 456 Daniel
Cook 383 222  
Robert 456 . Smith
Robert 456 . William
Daniel 777 222  

 


Accepted Solutions
Solution
‎10-31-2016 10:14 AM
Super User
Posts: 6,930

Re: Logic behind left joint ??

Which of the output lines surprise you? All follow your condition.

The first, fourth and fifth records of your datasets are taken as is because there are no matching ManagerID's.

The second and third each find two matches, and the names from those appear in Manager_name.

 

Unless an explicit order is specified, the order of the output is determined by the internal mechanism of SQL.

Which seems to take the key of the left side in the join for the order.

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers

View solution in original post


All Replies
Solution
‎10-31-2016 10:14 AM
Super User
Posts: 6,930

Re: Logic behind left joint ??

Which of the output lines surprise you? All follow your condition.

The first, fourth and fifth records of your datasets are taken as is because there are no matching ManagerID's.

The second and third each find two matches, and the names from those appear in Manager_name.

 

Unless an explicit order is specified, the order of the output is determined by the internal mechanism of SQL.

Which seems to take the key of the left side in the join for the order.

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
☑ This topic is SOLVED.

Need further help from the community? Please ask a new question.

Discussion stats
  • 1 reply
  • 189 views
  • 0 likes
  • 2 in conversation