大家。 我目前正在使用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
... ...
如果有人可以帮助我,我将不胜感激。
谢谢,
答案 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