SAS中的PROC SQL-所有项对

SAS中的PROC SQL-所有项对,sql,sas,Sql,Sas,我有一个数据集,其中我需要查看来自另一个组的所有项目对。我在下面创建了一个玩具示例来进一步解释 BUNCH FRUITS 1 apples 1 bananas 1 mangos 2 apples 3 bananas 3 apples 4 bananas 4 apples 我想要的是一个所有可能的对的列表,并将它们在一组中一起出现的频率求和。理想情况下,我的输出如下所示: FRU

我有一个数据集,其中我需要查看来自另一个组的所有项目对。我在下面创建了一个玩具示例来进一步解释

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进行网络分析的东西。为此,我需要一个源和目标列(即上面的FROUT1和FROUT2)

我认为在不使用PROC-SQL(可能使用PROC-TRANSPOSE)的情况下,也有一些其他方法可以实现这一点,但这就是我的出发点


解决方案

谢谢你的帮助。下面的示例代码适用于对类似内容感兴趣的任何人:

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;

最简单的方法是在t1.ID=t2.ID和t1.FRUIT ne t2.FRUIT上对表本身进行笛卡尔(完全)联接。这将生成完整的组合集,您可以对其进行汇总。

这是上面的复制/粘贴版本。一个简单的读数显示错误-香蕉苹果和苹果香蕉的重复计数行。为了达到预期的结果,需要额外的限制(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;