2015-10-20 71 views
1

我想结合两个数据集t1和t2:组合2个SAS数据集

数据集1(一变量X)

X 
1 
2 
3 
4 

数据集2(一个可变Y)

Y 
A 
B 
C 

合并成一个新的数据集 dataset1 + 2 t3

X Y 
1 A 
1 B 
1 C 
2 A 
2 B 
2 C 
3 A 
3 B 
3 C 
4 A 
4 B 
4 C 

正如你所看到的,我没有共同的变数,我试过一套不同的口味和合并组合

data t3 ; merge t1 t2 ; run ; 
data t3 ; set t1 ; set t2 ; run ; 
data t3 ; set t1 ; if _n_ then set t2 ; run ; 
data t3 ; set t1 t2 ; run ; 

任何帮助(SAS或SQL)大加赞赏

问候

SW

回答

0

这会工作,并产生预期的结果,基本上你在SAS看着笛卡尔积,

proc sql; 
    select t1.*,t2.* 
    from t1 ,t2 
    ; 
quit; 

Output of above Code

+0

谢谢。简单而直接。它像一个魅力一样工作! – Sylvain

+0

是我的荣幸,你能请注明有用的答案:) – Vishant

0

使用CROSS JOIN

CREATE TABLE #tab1(X INT); 

CREATE TABLE #tab2(Y NVARCHAR(12)); 

INSERT INTO #tab1 
VALUES (1), (2), (3), (4); 

INSERT INTO #tab2 
VALUES ('A'), ('B'), ('C'); 

SELECT X, Y 
FROM #tab1 
CROSS JOIN #tab2 
ORDER BY X, Y; 

LiveDemo

+1

哇。我们已经在SE自己捣鼓!很高兴知道。由于 – Utsav

+0

@Utsav其实SEDE是用于查询SE数据库(见边栏上表),但我们可以创建临时表和临时变量为什么不在这里使用它:) – lad2025

0

不知道在DB所以这应该工作在最

select a.X,b.Y from 
dataset1 a , dataset2 b 
where 1=1 
0
DECLARE @Table1 TABLE 
    (X int) 
; 

INSERT INTO @Table1 
    (X) 
VALUES 
    (1), 
    (2), 
    (3), 
    (4) 
; 

DECLARE @Table2 TABLE 
    (Y varchar(1)) 
; 

INSERT INTO @Table2 
    (Y) 
VALUES 
    ('A'), 
    ('B'), 
    ('C') 
; 
select * from @Table1 T cross apply (select * from @Table2)TT 

ORDER BY t.X