我有以下数据集
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个月,我想要中等。
一些例子:
(jan2006 sales = jan2005 sales ) / jan2005 sales
答案 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;