SAS Math Разница между двумя таблицами - PullRequest
0 голосов
/ 13 апреля 2019

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

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 голосов
/ 13 апреля 2019
proc compare base=data1 compare=data2 out=diff outdif noprint;
   id var;
   run;

enter image description here

0 голосов
/ 13 апреля 2019

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

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

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

...