BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
manya92
Fluorite | Level 6
proc sql ;
	create table _01_iv_of_i as
	select distinct a.*, b.code as b_code, b.index_of, c.code as c_code, index_proc
	from derived._01_ser_inf as a 
	inner join derived._01_of as b
	on a.enrolid = b.enrolid 
	inner join derived._01_iv as c
	on a.enrolid = c.enrolid ;
quit ;/*15257338*/

%count_pt ;
%print ;
/*UNION TO GET ALL CODES IN ONE ROW */
proc sql ;	
	create table derived._01_ic_of_i2 as
	select distinct enrolid, index_i as svcdate format mmddyy10., code 
	from _01_iv_of_i 
	union 
	select distinct enrolid , index_of as svcdate format mmddyy10. , b_code as code
	from _01_iv_of_i
	union 
	select distinct enrolid, index_proc as svcdate format mmddyy10., c_code as code
	from _01_iv_of_i;
quit;/*184553*/

why do i have less observations in the second step. Should i not be having double  or more ?

1 ACCEPTED SOLUTION

Accepted Solutions
Reeza
Super User

Union Vs UNION ALL. 


Union does not inlcude duplicates, union all includes duplicates. 
However, since in this case it's not true duplicates you definitely want UNION ALL.

 


@manya92 wrote:
proc sql ;
	create table _01_iv_of_i as
	select distinct a.*, b.code as b_code, b.index_of, c.code as c_code, index_proc
	from derived._01_ser_inf as a 
	inner join derived._01_of as b
	on a.enrolid = b.enrolid 
	inner join derived._01_iv as c
	on a.enrolid = c.enrolid ;
quit ;/*15257338*/

%count_pt ;
%print ;
/*UNION TO GET ALL CODES IN ONE ROW */
proc sql ;	
	create table derived._01_ic_of_i2 as
	select distinct enrolid, index_i as svcdate format mmddyy10., code 
	from _01_iv_of_i 
	union 
	select distinct enrolid , index_of as svcdate format mmddyy10. , b_code as code
	from _01_iv_of_i
	union 
	select distinct enrolid, index_proc as svcdate format mmddyy10., c_code as code
	from _01_iv_of_i;
quit;/*184553*/

why do i have less observations in the second step. Should i not be having double  or more ?


 

View solution in original post

2 REPLIES 2
Reeza
Super User

Union Vs UNION ALL. 


Union does not inlcude duplicates, union all includes duplicates. 
However, since in this case it's not true duplicates you definitely want UNION ALL.

 


@manya92 wrote:
proc sql ;
	create table _01_iv_of_i as
	select distinct a.*, b.code as b_code, b.index_of, c.code as c_code, index_proc
	from derived._01_ser_inf as a 
	inner join derived._01_of as b
	on a.enrolid = b.enrolid 
	inner join derived._01_iv as c
	on a.enrolid = c.enrolid ;
quit ;/*15257338*/

%count_pt ;
%print ;
/*UNION TO GET ALL CODES IN ONE ROW */
proc sql ;	
	create table derived._01_ic_of_i2 as
	select distinct enrolid, index_i as svcdate format mmddyy10., code 
	from _01_iv_of_i 
	union 
	select distinct enrolid , index_of as svcdate format mmddyy10. , b_code as code
	from _01_iv_of_i
	union 
	select distinct enrolid, index_proc as svcdate format mmddyy10., c_code as code
	from _01_iv_of_i;
quit;/*184553*/

why do i have less observations in the second step. Should i not be having double  or more ?


 

PaigeMiller
Diamond | Level 26

@manya92 could you provide meaningful titles on your posts from now on? SOmething like "Two PROC SQLs not producing same results". Thanks.

--
Paige Miller

SAS Innovate 2025: Save the Date

 SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!

Save the date!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 2 replies
  • 785 views
  • 1 like
  • 3 in conversation