2012-08-16 83 views
0

我正在使用SAS進行分析。每次分析後,我都會得到四張表格。表11,表12,表21和表22。每個表只有一個數字。我想把這四個數字(從四個表格)變成一個2x2矩陣。我怎樣才能使用SAS proc sql?例如,當我有1(表1中唯一的數字),2(表格2中唯一的數字),3(表格3中唯一的數字),4(表格4中唯一的數字),我想製作花葯桌,裏面有一個2比2的桌子,裏面有這四個數字。如何將四個表中的四個數字放入一個2乘2表格中?

回答

4

一個完全哈克,可怕的方式做到這一點可能是這個樣子:

SELECT (SELECT num FROM table1), (SELECT num FROM table2) 
    UNION ALL 
SELECT (SELECT num FROM table3), (SELECT num FROM table4) 

您可能要在那裏工會的各部分後加一個「虛擬」的表(如SELECT ... FROM sysibm.sysdummy1在DB2) 。

我從來沒有使用SAS,所以我不知道具體情況。也許這(標準的SQL)解決方案將爲你工作。但就像我說的那樣,它非常黑客,所以可能有更好的方法來做到這一點。也許具有同等的執行計劃

2

(使用隱式交叉連接):

SELECT table11.num, table12.num 
FROM table11, table12 
    UNION ALL 
SELECT table21.num, table22.num 
FROM table21, table22 
+0

嘿,夥計們,感謝您的大力幫助。這是一個非常聰明的方法。我試過了,它確實有效。 – user1602156 2012-08-16 04:47:25

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 
+0

大聲笑,我喜歡這種方法,但你應該重命名你的變量只使用大寫字母XXKXKX和大寫字母XXKXXKX來利用我們的誦讀困難類型 – 2012-08-16 16:53:00

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;))