使用 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
各位。 我目前正在使用 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