0

SASを使って分析しています。分析のたびに、4 つのテーブルが得られます。Table11Table12Tabe21およびTable22。各テーブルには 1 つの番号しかありません。これらの 4 つの数値 (4 つのテーブルから) を 2x2 マトリックスに入れたいと思います。SAS を使用してそれを行うにはどうすればよいproc sqlですか?

たとえば1 (表 1 の唯一の数字)、2 (表 2 の唯一の数字)、3 (表 3 の唯一の数字)、4 (表 4 の唯一の数字) がある場合、これらの 4 つの数値を内部に持つ 2 x 2 のテーブルを持つ葯のテーブルを生成します。

4

4 に答える 4

4

これを行うための完全にハックで恐ろしい方法は、次のようになります。

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

ユニオンの各部分の後に「ダミー」テーブルを追加する必要がある場合があります ( SELECT ... FROM sysibm.sysdummy1DB2 のように)。

SASは使ったことがないので詳しいことはわかりません。たぶん、その(標準SQL)ソリューションがうまくいくでしょう。しかし、私が言ったように、それはひどくハックなので、おそらくもっと良い方法があります.

于 2012-08-16T04:04:46.077 に答える
2

おそらく同等の実行計画 (暗黙的なクロス結合を使用):

SELECT table11.num, table12.num
FROM table11, table12
    UNION ALL 
SELECT table21.num, table22.num
FROM table21, table22
于 2012-08-16T04:09:49.557 に答える
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;))
于 2012-08-18T03:18:09.317 に答える
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
于 2012-08-16T04:35:28.593 に答える