有两个数据,它们的变量名称和布局完全相同
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
;
答案 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)