SAS - Создать таблицу - PullRequest
       13

SAS - Создать таблицу

0 голосов
/ 20 октября 2018

У меня есть две модели, которые выводят:

output out=m1 pred=p1;
output out=m2 pred=p2;

Они работают нормально и создают следующие примеры наблюдений:

Образец M2

Obs       p1

  1    0.98057
  2    0.71486
  3    0.91951
  4    0.93073
  5    0.93505
  6    0.98788
  7    0.94461
  8    0.99449
  9    0.93282
 10    0.88654

AND

Образец M1

Obs       p2

  1    0.97988
  2    0.70704
  3    0.91731
  4    0.92880
  5    0.93324
  6    0.98746
  7    0.94386
  8    0.99431
  9    0.93102
 10    0.88404

Далее я пытаюсь объединить два в таблицу с помощью инструкции:

proc sql;
create table ptable as select *
from m1 as a left join m2 as b on a.cnt=b.cnt;
quit;

Но я получаю эту ошибку: ОШИБКА:Столбец cnt не найден в таблице / представлении, идентифицированном с именем корреляции A. ОШИБКА: Столбец cnt не найден в таблице / представлении, идентифицированном с именем корреляции A. ОШИБКА: Столбец cnt не найден в таблице /представление, идентифицированное с именем корреляции B. ОШИБКА: не удалось найти столбец cnt в таблице / представлении, идентифицированном с именем корреляции B.

Итак, как мне поместить p1 и p2 в таблицу в SAS?

Ниже приведен код, используемый для генерации p1 и p2, где DATA = source

/*initial model*/
proc hplogistic data=DATA;
model value(event='1')=X1-X20;
output out=m1 pred=p1;
run;

/*new model*/
proc hplogistic data=data;
model value(event='1')=X1-X20;
output out=m2 pred=p2;
run;

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Вот ответ, который прошел весь путь:

/*initial model*/
proc hplogistic data=DATA;
model value(event='1')=X1-X20;
output out=m1 pred=p1 copyvars=(cnt readmit);
run;

/*new model*/
proc hplogistic data=data;
model value(event='1')=X1-X20;
output out=m2 pred=p2 copyvar=cnt;
run;

cnt нужно было включить в вывод, чтобы объединить его в таблицу.

0 голосов
/ 20 октября 2018

Это случай выполнения слияния без оператора a by.Таблицы будут соединяться строка за строкой.

Например,

data have1(keep=p1) have2(keep=p2);
  do _n_ = 1 to 10;
    p1 = 1 / _n_;
    p2 = _n_ ** 2;
    output;
  end;
run;

data want;
  merge have1 have2;
  *** NO BY STATEMENT ***;
run;
proc print data=want;run;
-------- OUTPUT --------
Obs       p1       p2

  1    1.00000      1
  2    0.50000      4
  3    0.33333      9
  4    0.25000     16
  5    0.20000     25
  6    0.16667     36
  7    0.14286     49
  8    0.12500     64
  9    0.11111     81
 10    0.10000    100

Слияния без BY нетипичны при обработке данных, что обычно I .

...