从韦恩图看统计编程语言上的 merge/join

无论是SAS,R,Python,Stata,还是SPSS,关于merge(或者是各种形式的join,如inner join、Cartesian Product)数据集的操作原理都是上面的韦恩图范畴之内,不同的只是代码形式。万变不离其宗。
学习之余来玩一个游戏:
现在我有7个点,或者直接是7个城市,希望你给我做一个每两个城市之间连线的数据集,希望越简单越好。
这里我们拿 SAS 来做,对于上面其他 4 种统计编程语言,有感兴趣的小伙伴可以尝试做一下。
首先我们随意给定一个数据集:
data cities;
input pointid city $12.;
cards;
1 LosAngeles
2 Orlando
3 London
4 NewYork
5 Boston
6 Paris
7 Washington
8 LosAngeles
9 Orlando
10 London
;
run;
proc sql;
create table discity as
select distinct city
from cities;
quit;
proc print data=discity;
title "Distinct Cities";
format city $12.;
run;

原理上很简单,7 个城市之间任意两点连线,是个排列组合问题,对于不重复的连线,应该是7*6/2 =21条。
我们是这么操作的:
proc sql;
create table pair_cities as
select f1.city as orig ,
f2.city as dest
from discity as f1 , discity as f2
where f1.city ne ' ' & f1.city < f2.city
order by f1.city, f2.city;
quit;
title 'All Possible Paired Places';
proc print data=pair_cities;
format orig dest $12.;
run;
