BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
miner_girl
Calcite | Level 5

Dear SAS community,

 

I need your help to merge two tables with same columns. To be more precise, I have two tables one very large(more than 200 columns and about 6000 rows) and second tables with same columns and just one row. I need to impute values from second table in missing field in first table.

Example:

Table 1

A1 A2 A3 A4 A5 ....

5    6.7  1   .   2

.      2    .    3   .

 

Table 2

A1 A2 A3 A4 A5 ...

2.4  6.5 5  2.8  1.7

 

Result

A1  A2   A3   A4     A5 ....

5     6.7   1    2.8   2

2.4   2     5     3    1.7

 

Any ideas?

 

Is it possible to set keys for merging as arrays?

 

Thank you!

1 ACCEPTED SOLUTION

Accepted Solutions
Ksharp
Super User
data have1;
input A1 A2 A3 A4 A5;
datalines;
5    6.7  1   .   2
.      2    .    3   .
;

data have2;
input A1 A2 A3 A4 A5;
datalines;
2.4  6.5 5  2.8  1.7
;

data a;
 set have1 end=last;
 id+1;
 if last then call symputx('n',_n_);
run;
data b;
 set have2;
 do id=1 to &n;
  output;
 end;
run;

data want;
 update b a;
 by id;
 drop id;
run;

View solution in original post

2 REPLIES 2
Kurt_Bremser
Super User

My idea: create a SQL step dynamically from SASHELP.VCOLUMN:

data have1;
input A1 A2 A3 A4 A5;
datalines;
5    6.7  1   .   2
.      2    .    3   .
;

data have2;
input A1 A2 A3 A4 A5;
datalines;
2.4  6.5 5  2.8  1.7
;

data _null_;
set sashelp.vcolumn (where=(libname ="WORK" and memname = "HAVE1")) end=done;
if _n_ = 1 then call execute("
proc sql;
create table want as
  select
");
call execute("coalesce(h1." !! strip(name) !! ",h2." !! strip(name) !! ") as " !! strip(name));
if done then call execute("
from have1 h1, have2 h2;
quit;
");
else call execute(",");
run;
Ksharp
Super User
data have1;
input A1 A2 A3 A4 A5;
datalines;
5    6.7  1   .   2
.      2    .    3   .
;

data have2;
input A1 A2 A3 A4 A5;
datalines;
2.4  6.5 5  2.8  1.7
;

data a;
 set have1 end=last;
 id+1;
 if last then call symputx('n',_n_);
run;
data b;
 set have2;
 do id=1 to &n;
  output;
 end;
run;

data want;
 update b a;
 by id;
 drop id;
run;

sas-innovate-wordmark-2025-midnight.png

Register Today!

Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.


Register now!

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