Merge SAS:Concat列来自不同表(相同的行数)

Merge SAS:Concat列来自不同表(相同的行数),merge,sas,Merge,Sas,我有两个行数相同的表,但没有一列可以连接在一起。比如: data table1(keep=Model) table2(keep=MSRP); set sashelp.cars; run; 我如何处理表1和表2以实现: 在python中,我将作为pandas.concat([table1,table2],axis=1)进行操作,但在这里,我可以尝试以下操作: data cancated; set table1 table2; run; 或 但特别是第二个给了我错误: 错误:U

我有两个行数相同的表,但没有一列可以连接在一起。比如:

data table1(keep=Model) table2(keep=MSRP);
    set sashelp.cars;
run;
我如何处理表1和表2以实现:

在python中,我将作为pandas.concat([table1,table2],axis=1)进行操作,但在这里,我可以尝试以下操作:

data cancated;
    set table1 table2;
run;

但特别是第二个给了我错误:

错误:UNION的第一个参与者的第1列不相同 键入第二个字符的对应项

因此,如果我不能正确地理解,我就不能用不同类型的变量进行这种连接


谢谢

您可以使用
merge
语句,而不使用任何
by
语句来获得两个或多个数据集观测值的逐行匹配

data concated;
  merge table1 table2;
run;
您也可以对每个数据集使用单独的
set
语句

data concated;
  set table1;
  set table2;
run;

当两个数据集有不同数量的观测值时,就会出现差异。使用
merge
时,观察值的数量将与较大数据集的数量相匹配。(仅来自较小数据集的变量将保留其值。)使用
set
语句,结果将仅具有较小数据集中的观察值数量。当任一
set
语句读取的数据超过输入数据集的末尾时,该步骤将结束。

您可以使用
merge
语句,而不使用任何
by
语句,以逐行匹配两个或多个数据集的观测值

data concated;
  merge table1 table2;
run;
您也可以对每个数据集使用单独的
set
语句

data concated;
  set table1;
  set table2;
run;

当两个数据集有不同数量的观测值时,就会出现差异。使用
merge
时,观察值的数量将与较大数据集的数量相匹配。(仅来自较小数据集的变量将保留其值。)使用
set
语句,结果将仅具有较小数据集中的观察值数量。当任一
set
语句读取的数据超过输入数据集的末尾时,该步骤将结束。

执行类似于查询中的操作。您需要使用如下所示的行号,然后加入和删除

 data table1(keep=Model var) table2(keep=MSRP var);
set sashelp.cars;
var = _n_;
run;

 proc sql;
 create table joined(drop=var) as 
 select a.*, b.* from table1 a
 full join table2 b
 on a.var = b.var;

 delete from joined where Model is missing or MSRP is missing
 ;

在查询中执行类似的操作。您需要使用如下所示的行号,然后加入和删除

 data table1(keep=Model var) table2(keep=MSRP var);
set sashelp.cars;
var = _n_;
run;

 proc sql;
 create table joined(drop=var) as 
 select a.*, b.* from table1 a
 full join table2 b
 on a.var = b.var;

 delete from joined where Model is missing or MSRP is missing
 ;

请注意,假设观测值实际上是按匹配顺序排列的,而没有任何标识符变量可用于验证您是否组合了正确的观测值,这不是一种良好的数据管理做法。“你能做并不意味着你应该做。”汤姆谢谢你的留言。在我的具体案例中,我将始终具有相同的行数和相同的顺序-因此,您的解决方案是完美的。请注意,假设观测值实际上处于匹配顺序,而没有任何标识符变量可用于验证您是否结合了正确的观测值,这不是一种良好的数据管理实践。“你能做并不意味着你应该做。”汤姆谢谢你的留言。在我的具体情况下,我将始终具有相同的行数和相同的顺序-因此,您的解决方案是完美的。