首页 > 解决方案 > SAS - 创建表

问题描述

我有两个有输出的模型:

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

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;

但我收到此错误:错误:在使用相关名称 A 标识的表/视图中找不到列 cnt。错误:在使用相关名称 A 标识的表/视图中找不到列 cnt。错误:在用相关名称 B 标识的表/视图中找不到列 cnt。错误:在用相关名称 B 标识的表/视图中找不到列 cnt。

那么如何将 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;

标签: sas

解决方案


这是在没有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 的合并是非典型的。


推荐阅读