2013-11-25 7 views
6

私は別のグループの中から一緒にされている項目のすべてのペアを見て必要のあるデータセットを持っているのすべてのペア。私はさらに説明するために以下のおもちゃの例を作成しました。PROC SQL - アイテム

BUNCH FRUITS 
1  apples 
1  bananas 
1  mangos 
2  apples 
3  bananas 
3  apples 
4  bananas 
4  apples 

私が望むのは、可能なすべてのペアのリストと、束内で一緒に発生する頻度の合計です。私の出力は、理想的には次のようになります。

FRUIT1 FRUIT2  FREQUENCY 
APPLES BANANAS 3 
APPLES MANGOS  1 

私の最終目標は、私が最終的にネットワーク分析のためにGephiにインポートできるようになります何かを作ることです。このために私はソースとターゲットの列(別名FRUIT1と上記FRUIT2)が必要です。

私は(たぶんPROCのTRANSPOSEを使用して)PROC SQLを使用せずに、同様にこれをアプローチするには、いくつかの他の方法があると思いますが、私が始めた場所です。助けのための


SOLUTION

感謝。類似した何かに興味がある人のために、以下のサンプルコード:

proc sql; 
    create table fruit_combo as 
    select a.FRUIT as FRUIT1, b.FRUIT as FRUIT2, count(*) as FREQUENCY 
    from FRUITS a, FRUITS b 
    where a.BUNCH=b.BUNCH and and not a.FRUIT= b.FRUIT 
    group by FRUIT1, FRUIT2; 
    quit; 

答えて

4

最も簡単なアプローチは、t1.ID = t2.IDとt1.FRUIT NE t2.FRUITに、デカルト(フル)を行うそれ自体にテーブルの結合することです。それは完全な組み合わせセットを生成し、それを集計することができます。

+0

ありがとうございました!これはまさに私がする必要があったものでした。 – pmbaumgartner

0

は、ここでは上記のコピー/ペーストバージョンです。シンプルな読み方では、バナナ - リンゴとリンゴ - バナナの重複行が表示されます。追加の制限は、(a.FRUIT GT b.FRUIT)必要とされた所望の結果を取得します。

data FRUITS ; 
input BUNCH FRUIT $; 
cards; 
1  apples 
1  bananas 
1  mangos 
2  apples 
3  bananas 
3  apples 
4  bananas 
4  apples 
; 
run; 


proc freq data=have ; 
tables fruits; 
run; 


proc sql; 
    create table fruit_combo as 
    select a.FRUIT as FRUIT1, b.FRUIT as FRUIT2, count(*) as FREQUENCY 
    from FRUITS a, FRUITS b 
    where a.BUNCH=b.BUNCH 
    and a.FRUIT ne b.FRUIT 
    and a.FRUIT gt b.FRUIT 
    group by FRUIT1, FRUIT2; 
    quit; 

proc print ; run; 
関連する問題