daazx 发表于 2017-8-16 10:17 
是可以的,多谢多谢~
实际上我的表中可能有几十万条数据,这样自关联,会不会耗时太久,有些优化的余地 ...
会很影响的,你需要先建立一个辅助数据集,生成t2的前两列,接下来就是1:1匹配,不然的话SQL太慢了。
- data t1;
- input v $ value;
- datalines;
- a 1
- b 2
- c 3
- d 4
- ;
- * 添加一个辅助列作为组的ID ;
- data t1;
- set t1;
- id_group = _n_;
- run;
-
- proc print data=t1; run;
- * 构造一个中间数据集用来1:1匹配 ;
- data t2;
- do i_group = 1 to 4;
- do j_group = (i_group+1) to 4;
- output;
- end;
- end;
- run;
- proc print data=t2; run;
- * 依靠中间数据集完成匹配 ;
- proc sql;
- create table t3 as
- select a.v as v1, b.v as v2, a.value as value1, b.value as value2
- from t2 as c
- inner join t1 as a
- on c.i_group = a.id_group
- inner join t1 as b
- on c.j_group = b.id_group
- order by v1, v2;
- quit;
-
- proc print data=t3; run;
复制代码