使用PROC SQL合并表格在SAS

时间:2017-04-18 08:55:15

标签: mysql sql sas proc-sql

大家。 我目前正在使用SAS。 这是我的情况。

我有一个名为'a'的表,它看起来像:

id_c  id_t  
 5     3
 2     9
 15    1
 65    43
 ...   ...

这个表只有两个与其他表不同的ID。这些5& 3,2和9 ......是成对的。

我想要做的是我想要取出每个id_t和id_c,以便我可以分别合并其他表中的其他变量。 为此,首先我决定取出id_t并合并其他变量。 以下代码有效:

proc sql;                                                                                                                                         
create table t1 as                                                                                                        
select *                                                                                                                                          
from other_var_table_1                                                                                                                    
where id_t in (select id_t from a);                                                                        
quit;   

结果是:

id_t  var1  var2  var3 
 3
 9
 1
 43

这里,id_t的顺序与表'a'中id_t的顺序完全相同。

然而,当我使用id_c做同样的事情时,订单搞砸了。 我想要:

id_c  var_x  var_y  var_z 
5
2
15
65

但是当我运行相同的代码时,结果如下:

proc sql;                                                                                                                                         
create table t2 as                                                                                                        
select *                                                                                                                                          
from other_var_table_2                                                                                                                    
where id_c in (select id_c from a);                                                                        
quit;   

id_c  var_x  var_y  var_z 
65
15
5
2

这样做的目的是再次合并两个表,包括所有变量,例如:

data final;                                                                                                                          
set t2;                                                                                                                     
set t1;                                                                                                                   
run; 

id_c  var_x var_y var_z id_t var1 var2 var3   
 5                       3
 2                       9
 15                      1
 65                      43
 ...                     ...

如果有人可以帮助我,我将不胜感激。

谢谢,

1 个答案:

答案 0 :(得分:0)

/****CREATING DATASETS****/  
data a;
input int_c int_t;
cards;
 5     3
 2     9
 15    1
 65    43
 ;
 run;  

/*Create a **seq** number so that your order does not change*/
data a;
set a;
seq = _n_;
run;

data other_var_table_1;
input int_t var1 var2 var3;
cards;
3 12 43 76
1 10 20 30
;
run; 


data other_var_table_2;
input int_c var_x var_y var_z;
cards;
2 100 200 300
5 1 2 3
65 10 20 30
;
run; 

/****JOINING THE REQUIRED COLUMNS****/
proc sql;
create table final as
select r.*,p.var1,p.var2,p.var3,q.var_x,q.var_y,q.var_z
from
a r
left join
other_var_table_1 p
on r.int_t = p.int_t 
left join
other_var_table_2 q
on r.int_c = q.int_c 
order by r.seq;
run;    

如果需要,您可以在结果后删除 seq 列。如果您有任何疑问,请告诉我。

我的输出:

int_c   |int_t  |SEQ    |var1   |var2   |var3   |var_x  |var_y  |var_z
5       |3      |1      |12     |43     |76     |1      |2      |3
2       |9      |2      |.      |.      |.      |100    |200    |300
15      |1      |3      |10     |20     |30     |.      |.      |.
65      |43     |4      |.      |.      |.      |10     |20     |30