Another solution: data have;
input letter $ number;
datalines;
a 1
b 2
c 3
;
PROC SQL;
CREATE TABLE WORK.temp1 AS
SELECT t1.letter
FROM WORK.HAVE t1;
QUIT;
PROC SQL;
CREATE TABLE WORK.temp2 AS
SELECT t1.number
FROM WORK.HAVE t1;
QUIT;
PROC SQL;
CREATE TABLE WORK.temp3 AS
SELECT t1.letter,
t2.number
FROM WORK.temp1 t1
CROSS JOIN WORK.temp2 t2;
QUIT;
PROC SQL;
CREATE TABLE WORK.WANT0 AS
SELECT DISTINCT t1.letter,
t1.number,
t2.letter AS letter1,
t2.number AS number1,
t3.letter AS letter2,
t3.number AS number2
FROM WORK.temp3 t1
CROSS JOIN WORK.temp3 t2
CROSS JOIN WORK.temp3 t3
WHERE t1.letter < t2.letter AND t2.letter < t3.letter AND t1.number NOT = t2.number AND t2.number NOT = t3.number
AND t1.number NOT = t3.number;
QUIT;
PROC SQL;
CREATE TABLE WORK.WANT AS
SELECT /* VAR1 */
(CATX('-',t1.letter,put(t1.number,z.))) AS VAR1,
/* VAR2 */
(CATX('-',t1.letter1, put( t1.number1,z.))) AS VAR2,
/* VAR3 */
(CATX('-',t1.letter2,PUT(t1.number2,Z.))) AS VAR3
FROM WORK.WANT0 t1;
QUIT;
... View more