两个表之间的SAS Math差异

时间:2019-04-13 18:30:34

标签: sas

有两个数据,它们的变量名称和布局完全相同

data data1;
input var$ val1 val2 val;
datalines;
A 0 8 8
B 9 8 7
C 7 2 3
;

data data2;
 input var$ val1 val2 val;
 datalines;
 A 0 7 8
 B 9 8 7
 C 5 2 3
;

想要每个数字单元格中的数学差异。寻找优雅和聪明的方法。真正的数据集具有更多的变量和列。

data want;
 input var$ val1 val2 val;
 datalines;
 A 0 1 0
 B 0 0 0
 C 2 0 0
;

2 个答案:

答案 0 :(得分:0)

假设数据结构完全相同,并且两个数据集都以相同的相对顺序具有完全相同数量的观察值,则可以执行此操作。

基本上将第一个数据集中的数据复制到一个临时数组中,然后从第二个数据集中读取数据并进行减法。

data want;
  array _temp [1000] _temporary_ ;
  set data1 ;
  array _x _numeric_;
  do _n_=1 to dim(_x);
    _temp[_n_]=_x[_n_];
  end;
  set data2 ;
  do _n_=1 to dim(_x);
    _x[_n_] =_temp[_n_]-_x[_n_];
  end;
run;

确保临时数组的大小足够大。太大不会伤害任何东西。

如果不想计算所有数字字段的差,可以将_numeric_变量列表更改为更特定的变量列表。数组中未包含的所有变量将从第二个数据集中读取值。

答案 1 :(得分:0)

proc compare base=data1 compare=data2 out=diff outdif noprint;
   id var;
   run;

enter image description here