我正在使用SAS进行分析。每次分析后,我都会得到四张桌子。表11,表12,表21和表22。每个表只有一个数字。我想把这四个数字(从四个表格)放到一个2x2矩阵中。我怎么能用SAS proc sql做到这一点?
例如,当我有1(表1中唯一的数字),2(表2中唯一的数字),3(表3中唯一的数字),4(表4中唯一的数字)时,我我想制作一个有2by 2表的anther表,里面有这四个数字。
答案 0 :(得分:4)
一个完全黑客,可怕的方法可能看起来像这样:
SELECT (SELECT num FROM table1), (SELECT num FROM table2)
UNION ALL
SELECT (SELECT num FROM table3), (SELECT num FROM table4)
您可能必须在联合的每个部分之后添加一个“虚拟”表(如DB2中的SELECT ... FROM sysibm.sysdummy1
)。
我从未使用过SAS,所以我不知道具体细节。也许(标准SQL)解决方案对您有用。但就像我说的那样,它非常强烈,所以可能有更好的方法。
答案 1 :(得分:2)
可能具有等效的执行计划(使用隐式交叉连接):
SELECT table11.num, table12.num
FROM table11, table12
UNION ALL
SELECT table21.num, table22.num
FROM table21, table22
答案 2 :(得分:0)
显然,你想要采用工作安全技术。
with
t11(r, c, num) as (SELECT 1, 1, num from table11),
t12(r, c, num) as (SELECT 1, 2, num from table12),
t21(r, c, num) as (SELECT 2, 1, num from table21),
t22(r, c, num) as (SELECT 2, 2, num from table22)
select
coalesce(t11.num, t21.num) as col1,
coalesce(t12.num, t22.num) as col2
from
(t11 cross join t12)
full outer join
(t21 cross join t22)
on t11.r = t21.r or t12.r = t22.r
或者如果您不想浪费列c中的值,可能会更好。
case
when t11.r * t11.c = t12.c - t12.r
then t11.num else t21.num
end as col1,
case
when t21.r * t22.r * t22.c - t21.c = t21.r + t21.c + t22.r + t22.c
then t22.num else t12.num
end as col2
答案 3 :(得分:0)
您已收到上述一些优点/解决方案,但是您可能希望在加入之前尝试自动检查每个数据集是否存在。如下所示:
data c12;
c12=32;
run;
data c21;
c21=40;
run;
data c22;
c22=12;
run;
%sysfunc(ifc(%sysfunc(exist(c11)),
proc print data = a; run;,
data _null_; file print; put 'Dataset "c11: was not created'; run;))