2013-11-25 26 views
6

Başka bir grupta birlikte bulunan tüm öğe çiftlerine bakmam gereken bir veri kümesine sahibim. Daha fazla açıklamak için aşağıda bir oyuncak örneği oluşturdum.PROC SQL - Tüm Öğeler çifti

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

İstediğim tüm olası çiftlerin listesidir ve bir grup içinde birlikte ortaya çıktıkları sıklığı toplar. Benim çıkış ideal olarak bu şekilde görünecektir:

FRUIT1 FRUIT2  FREQUENCY 
APPLES BANANAS 3 
APPLES MANGOS  1 

Benim nihai hedef Sonunda bir ağ analizi için Gephi aktarmak mümkün olacak bir şey yapmaktır. Bunun için bir Kaynak ve Hedef sütununa ihtiyacım var (yukarıda FRUIT1 ve FRUIT2).

Sanırım PROC SQL kullanmadan (PROC TRANSPOSE kullanarak) bu yaklaşmaya başka yolları da var ama başladığım yer burası. Yardım için


ÇÖZÜM

teşekkürler. benzer bir şey ilgilenen herkes için aşağıdaki örnek kod:

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; 

cevap

4

En basit yaklaşımla t1.ID = t2.ID ve t1.FRUIT ne t2.FRUIT üzerinde, bir kartezyen (tam) yapmak kendisine tablonun katılmaktır . Bu, daha sonra özetleyebileceğiniz tam kombinasyon setini oluşturacaktır.

+0

Teşekkür ederiz! Bu tam olarak yapmam gereken şeydi. – pmbaumgartner

0

İşte yukarıdaki kopyalama/yapıştırma sürümü. Basit bir okuma hataları gösterir - muz-elma ve elma-muz için sayım sıralarını çoğaltın. İstenen sonuca ulaşmak için ek bir kısıtlama gerekliydi (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;