У двух данных их имена переменных и расположение абсолютно одинаковы

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
;
sas
0
user1481397 13 Апр 2019 в 21:30

2 ответа

Лучший ответ
proc compare base=data1 compare=data2 out=diff outdif noprint;
   id var;
   run;

enter image description here

0
data _null_ 13 Апр 2019 в 19:08

Предполагая, что структуры данных абсолютно одинаковы и что оба набора данных имеют одинаковое количество наблюдений в одинаковом относительном порядке, вы можете сделать это.

В основном скопируйте данные из первого набора данных во временный массив, а затем прочитайте данные из второго набора данных и выполните вычитание.

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_ на более конкретный список переменных, если вы не хотите вычислять разницу для всех числовых полей. Любая переменная, не включенная в массив, будет иметь значения, прочитанные из второго набора данных.

0
Tom 13 Апр 2019 в 19:06