根据字符变量计算数值

时间:2015-08-12 17:45:20

标签: sas

我有以下数据集

Date       Company      Sales
Jan05     Coca-Cola      256    
Jan05     Lowes          70
Jan05     Apple          90    
Feb05     McDonald       456
Feb05     Apple          89
Feb05     Microsoft      876
March05
April05
. 
.
.
Jan06     Apple          678
Jan06     Lowes          87
Jan06     Intel          56 
Feb06     McDonald       67
Feb06     Apple          281
Feb06     Barclays       876
March06
April06
.
.
.
Jan07    Apple          567
Jan07    Lowes          76
Jan07    Intel          87
Feb07    TJmax          678
Feb07    McDonald       765
Feb07    Astraz         67
March07   
April06
.
.
.
May15

正如您所看到的,数据集从2005年1月开始,一直持续到2015年5月。一年中的每个月都有数百家销售量不同的公司。

我试图计算每个至少连续13个月购买的公司(即从开始到结束月份的12个月内)的12个月销售增长率。 如果有多个期限为12个月,我想要中等。

一些例子:

  • 如果公司购买 jan2005,feb2005,......直到... jan2006 ,增长率为(jan2006 sales = jan2005 sales ) / jan2005 sales
  • 如果一家公司购买多个不相交的期间,期限为12个月,例如 jan2005,......直到... jan2006 jan2008,...直到... jan2009 jan2010,...直到... 2011年1月,增长率是个人生活率的中位数
  • 如果一家公司连续14个月购买,例如 jan2005,......直到...... feb2006 ,增长率是 jan2005,......的中位数。 .. jan2006 feb2005,......直到...... feb2006

1 个答案:

答案 0 :(得分:0)

使用信息读取数据   - 在SAS中,唯一的数据类型是固定宽度字符串和双精度数字。   - 看起来像日期变量的实际上是一个数字(即自1jan1960以来的天数)以及相关的打印格式。我用了ddmmyy9。   - 要从字符串表示中读取日期,请使用信息。我使用了monyy5.;

data theInput;
    infile theFile firstobs=2;
    format Date ddmmyy9. Company $12. Sales 8.;
    input Date monyy5. Company $ Sales;
;
run;

<强>排序

proc sort data=theInput out=reOrdered;
    by Company Date;
run;

获得个人增长率;

data individualRates;
    set reOrdered;
    by Company Date;
    format From Till monyy7.;

    from = lag12(Date);
    oldSales = lag12(Sales);

    if lag12(Company) EQ Company 
    and INTCK('month', from, Date) EQ 12 then do;
        till = Date;
        rate =  (Sales - oldSales) / oldSales;
        output;
    end;
run;

计算中位数;

proc means data=individualRates noprint;
    by Company;
    output out=medianRates median(rate)=medianRate;
run;