比较并保持相同的角色观察

时间:2015-07-27 18:57:30

标签: sas median

我有以下数据集:

Date    ID    Company        
Jan05   1     Coca-Cola      
Jan05   2     Coca-Cola      
Jan05   3     Coca-Cola          
Jan05   4     Apple          
Jan05   5     Apple          
Jan05   6     Apple
Jan05   7     Microsoft     
Feb05   1     McDonald       
Feb05   2     McDonald       
Feb05   3     McDonald
Feb05   4     McDonald       
Feb05   5     McDonald       
Feb05   6     Microsoft        
 .
 .
 .
Jan06   1     Apple      
Jan06   2     Apple     
Jan06   3     Apple          
Jan06   4     Apple          
Jan06   5     Apple          
Jan06   6     Apple
Jan06   7     Apple     
Feb06   1     McDonald       
Feb06   2     McDonald       
Feb06   3     McDonald
Feb06   4     McDonald       
Feb06   5     McDonald       
Feb06   6     Lenova  
Feb06   7     Lenova       
 .
 .
Jan07   1     Apple      
Jan07   2     Apple     
Jan07   3     Apple          
Jan07   4     Microsoft          
Jan07   5     Lenovo          
Jan07   6     Apple
Jan07   7     Apple     
Feb07   1     TJmax       
Feb07   2     TJMax       
Feb07   3     TJMax
Feb07   4     TJMax       
Feb07   5     TJMax       
Feb07   6     TJMax  
Feb07   7     TJMax          
.
.
.
.
until July15

我想要做的是以下内容: 1:比较1月05日和1月6日,然后是1月6日,1月7日,2月05日,2月6日,06年2月,07年2月......等等,每个月计算相同公司存在时的ID中位数两个日期。 2:每次计算ID的中位数时,我都不想要新的数据集。我只想确保两家公司在1月05日和1月06日出现,然后计算ID的中位数。

在SAS中最好的方法是什么?

我的最终结果如下:

Date    Median_ID    
Jan05      2         
Jan06      4

Jan06      4     
Jan07      3

Feb05      3     
Feb06      3

Feb06      0
Feb07      0

从结果中可以看出:在05年1月和06年,唯一匹配的公司是Apple。在06年1月和1月,唯一再次匹配的公司是Apple。 因此,我们在公司匹配时采用ID的中位数。

1 个答案:

答案 0 :(得分:0)

目前尚不清楚您是如何计算样本数据的最终结果的 - 如果您将所有中间步骤包括在一个月内,将会更容易理解,例如Jan05。但是,这似乎可以用一些类似于以下内容的SQL来处理:

data have;
input Date monyy5. ID Company $32.;
format Date monyy5.;
cards;
Jan05   1     Coca-Cola      
Jan05   2     Coca-Cola      
Jan05   3     Coca-Cola          
Jan05   4     Apple          
Jan05   5     Apple          
Jan05   6     Apple
Jan05   7     Microsoft     
Feb05   1     McDonald       
Feb05   2     McDonald       
Feb05   3     McDonald
Feb05   4     McDonald       
Feb05   5     McDonald       
Feb05   6     Microsoft        
Jan06   1     Apple      
Jan06   2     Apple     
Jan06   3     Apple          
Jan06   4     Apple          
Jan06   5     Apple          
Jan06   6     Apple
Jan06   7     Apple     
Feb06   1     McDonald       
Feb06   2     McDonald       
Feb06   3     McDonald
Feb06   4     McDonald       
Feb06   5     McDonald       
Feb06   6     Lenova  
Feb06   7     Lenova       
Jan07   1     Apple      
Jan07   2     Apple     
Jan07   3     Apple          
Jan07   4     Microsoft          
Jan07   5     Lenovo          
Jan07   6     Apple
Jan07   7     Apple     
Feb07   1     TJmax       
Feb07   2     TJMax       
Feb07   3     TJMax
Feb07   4     TJMax       
Feb07   5     TJMax       
Feb07   6     TJMax  
Feb07   7     TJMax   
;
run;

proc sql;
    create table want as
        select a.date, median(a.ID) as Median_ID from have a inner join have b 
            on  month(a.date)= month(b.date) 
            and year(a.date) = year(b.date) - 1
            and a.ID         = b.ID
            and a.company    = b.company
        group by a.date
        ;
quit;