2015-09-07 920 views
0

我學習PROC SQL,不知爲什麼以下兩個結果是不同的:SAS PROC SQL生成笛卡爾積

我有兩個數據設置如下

data data1; 
    input name $ value; 
    datalines; 
a 1 
b 3 
c 5 
; 
run; 

data data2; 
    input name $ value; 
    datalines; 
A 2 
B 4 
C 6 
D 8 
; 
run; 

1,方法一

proc sql; 
    select * 
    from data1, data2 
    ; 
quit; 

2,方法二

proc sql noprint; 
    create table output as 
    select * from data1, data2 
    ; 
quit; 

enter image description here

+0

1只是生成結果,2是將生成的結果寫入工作表。查詢結果應該是一樣的,你能解釋一下你有什麼不同嗎? – kl78

+0

嗨,請看圖片 – useR

回答

1

在方法1中,您只是顯示數據。所以沒有問題。

但是在方法2中,您嘗試創建表「輸出」。你注意到數據集「data2」中的變量名嗎?它是名稱和價值。這些變量已經存在於data1中。

你會得到如下警告:

警告:變量名已經存在的文件WORK.OUTPUT。

警告:文件WORK.OUTPUT上已存在變量值。

只需重命名其中一個數據集中的變量並嘗試執行代碼即可。你會得到相同的結果。

+1

完美答案! – mjsqu

+0

@mjsqu,謝謝! – Kay