Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在SAS中使用PROC SQL where in语句合并表_Mysql_Sql_Sas_Proc Sql - Fatal编程技术网

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

Mysql 在SAS中使用PROC SQL where in语句合并表,mysql,sql,sas,proc-sql,Mysql,Sql,Sas,Proc Sql,各位。 我目前正在使用SAS。 这是我的情况 我有一张名为“a”的桌子,看起来像: id_c id_t 5 3 2 9 15 1 65 43 ... ... 这个表只有两个不同于其他表的ID。这五、三、二、九,。。。是成对的 我想做的是,我想去掉每个id_t和id_c,这样我可以分别合并其他表中的其他变量。 为此,首先我决定去掉id\u t并合并其他变量。 以下代码有效: proc sql;

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

我有一张名为“a”的桌子,看起来像:

id_c  id_t  
 5     3
 2     9
 15    1
 65    43
 ...   ...
这个表只有两个不同于其他表的ID。这五、三、二、九,。。。是成对的

我想做的是,我想去掉每个id_t和id_c,这样我可以分别合并其他表中的其他变量。 为此,首先我决定去掉id\u 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做同样的事情时,顺序就混乱了。 我想:

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

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
 ...                     ...
这样做的目的是再次合并两个表,包括所有变量,例如:

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
 ...                     ...
如果有人能帮助我,我将不胜感激

谢谢,

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

SQL表表示无序的数据集。您需要指定一列来确定顺序。在您的情况下,没有指定此类列。非常感谢您的帮助!你真的帮我解决了我的问题!再次感谢你。将来我可以问你一个问题吗?当然可以,你可以。谢谢你的赏识。