2017-09-29 61 views
0

我正在尋找每個人根據其獨特的開始和結束日期查找valueZ的平均值。曝光X擁有的每一天無數的值,爲每個位置,因爲這樣的(實際上有超過300價值每個站點&日期23處):如何查找數據集1中包含的每個人的數據集2中的平均值,這些人具有唯一的開始日期和結束日期?

data dataset2; 
input date location valueZ; 
datalines; 
1/1/2016 1 0.028 
1/1/2016 1 0.022 
... 
2/8/2016 1 0.041 
2/8/2016 1 0.044 
1/1/2016 2 0.056 
... 
8/8/2016 2 0.089 
1/1/2016 3 0.029 
... 
11/8/2016 3 0.083 
... 
1/1/2016 4 0.081 
... 
12/8/2016 4 0.019 
... 
10/30/2016 23 0.063 
; 

在數據集1的個體通過位置鏈接到數據集2作爲這樣的:

data dataset1; 
input individual location start_date end_date; 
datalines; 
1 1 1/1/2016 12/31/2016 
2 1 3/12/2016 9/4/2016 
3 2 2/5/2016 11/5/2016 
4 19 9/30/2016 10/3/2016 
5 23 4/12/2016 12/12/2016 
... 
305 16 1/20/2016 5/15/2016 
; 

所以,我想基於從起始日期在dataset2指出end_date之間爲每個位置的平均valueZ的結束了。有人可以幫助!

回答

0

是這樣的?

proc sql; 
    create table want as 
    select d1.individual 
     ,d1.location 
     ,avg(d2.valueZ) as avg_value 
    from dataset2 d2 
    join dataset1 d1 
    on d1.location=d2.location 
    and d2.date between d1.start_date and d2.end_date 
    group by d1.individual, d1.location 
quit; 
+0

是的!這比我在IML中試圖做得更乾淨,而且工作起來非常棒。謝謝! – Danielle

+0

有沒有方法可以生成每個平均值內缺失值的天數? – Danielle

+0

缺少VALUEZ值的日期?沒有出現在數據中的日期?你可以試試COUNT(DISTINCT d2.date)來查看你有多少個不同的日期值。然後,您可以從開始到結束的天數中減去有多少錯失。 – Tom

相關問題