2017-09-29 23 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

相关问题