使用 PROC SQL where in SAS 中的语句合并表

merging tables by using PROC SQL where in statement in SAS

各位。 我目前正在使用 SAS。 这是我的情况。

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

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

This,a, table 与其他 table 只有两个不同的 ID。这些 5&3, 2&9,... 是一对。

我想做的是,我想把id_t和id_c每个都取出来,这样我就可以分别合并其他table中的其他变量。 为此,我首先决定取出 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的顺序和table'a'中的id_t的顺序完全一样'a'.

但是,当我使用 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

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

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
 ...                     ...

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

谢谢,

/****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