2014-10-07 26 views
0

嘗試加入兩個數據集。每月有一個股票發行,另一個發行每日股價。我需要每日價格與他們每月的未償還股票相匹配,以便我可以將它們放在一起。SQL左連接兩個數據集。每月一份,每日一份

樣本數據是兩組。價格變量爲:date,firmprice。分享變量是date,firmShareout

合併的數據集應該添加Shareoutprices。因此,每月發行的股票數量應該只在每個月末更改。目前表格合併但sharesout全部爲空。

prices : 
Date  FIRM PRICE 
1/1/2013 1  2 
2/1/2013 1 2.05 
3/1/2013 1 2.04 

shareout : 
Date  FIRM SHAREOUT    
1/1/2013 1  200,000  
1/2/2013 1  215,000  
1/3/2013 1  250,000 

New Table - temp1 : 
Date FIRM Price SHAREOUT  
1/1/2013 1  2 200,000 
2/1/2013 1 2.05 200,000 
3/1/2013 1 2.04 200,000 

的代碼是:

proc sql; 
create table temp1 as 
select a.*, b.shareout from index.prices as a 
left join index.shareout as b on a.firm=b.firm and month(a.date)=month(b.date); 
quit; 

產生什麼:

Date  Firm Price Shareout 
1/1/2013 1  2  - 

Proc Contents table1 

ASX Char 10 $CHAR10. $CHAR10. 
CLOSE Num 8 BEST7. BEST7. 
Date Num 8 YYMMDD10. YYMMDD10. 
HI Num 8 BEST7. BEST7. 
LOW Num 8 BEST7. BEST7. 
Tick Num 8 BEST5. BEST5. 

Proc Contents table2 

asx Char 6 $CHAR10. $6. 
date Num 8 DDMMYYS10. 
shareout Num 8 BEST12. BEST32. 
year Num 8 BEST12. BEST32. 

乾杯。

+2

請編輯您的問題,並添加示例數據和預期結果。舉個例子,我不知道這意味着什麼:「我需要每日價格與他們每月的未償還股票相匹配,這樣我才能把它們放在一起。」 – 2014-10-07 03:16:38

+2

我沒有看到你的代碼有什麼問題。沒有看到數據,我們將無法幫助您進行調試。 – DomPazz 2014-10-07 03:31:35

+0

好吧,我將獲得數據。問題是加入後未完成的股票是空值。我不明白爲什麼會發生這種情況。 – Hamish 2014-10-07 03:35:05

回答

1

在邏輯上是正確的,你應該加入的年份和月份的比賽:

month(a.date)=month(b.date) and year(a.date)=year(b.date) 

但是,你提供什麼樣的PROC CONTENTS輸出不匹配您的代碼:沒有firm場在源表列清單,所以我想你對數據的假設,樣本數據和產出都不準確。

我建議你簡單地檢查你的數據,例如像這樣:

proc sql; 
select distinct year(date), month(date) from index.prices where firm=1; 
select distinct year(date), month(date) from index.shareout where firm=1; 
quit; 
+0

抱歉應該更清楚了。 ASX和公司是一回事。當我發佈代碼時,只需更改它,讓每個人都更清楚。 – Hamish 2014-10-07 09:47:22

+0

謝謝你。檢查了我的數據,我不認爲公司的匹配是區分大小寫的,絕對是一個愚蠢的舉動。早期Google搜索了它,我認爲SAS不區分大小寫。 – Hamish 2014-10-07 10:00:19

0

我看不出如何在字符列中存儲數字時遇到區分大小寫問題。 1在大寫和小寫都是1。如果公司是問題欄,我懷疑你的問題可能是領先空間。

您可以嘗試壓縮固定連接例如

left join index.shareout as b on compress(a.firm) = compress(b.firm) and month(a.date)=month(b.date);

連接表時,這將刪除從公司的兩個實例任何空格。

相關問題