我有55周的特定商品的销售数据。我从原始数据创建了两个SAS数据集。第一个数据集包含日期和每个日期的销售数量总和。因此,我有385个观测值(55 x 7)。第二个表有详细的交易数据。具体来说,对于每个日期,我有交易之间的时间,这是一个客户到达下一个购买该项目的客户之间的时间(我将其称为到达间隔时间)。我接下来需要做的是:
注意:我已经在两个数据集的每个数据集中标记了观察的周数,并且我编写了适合数据分布的代码。我正在努力的唯一领域是如何告诉SAS将数据用于一周,进行计算,拟合分布,然后移至下周(即按周对数据进行分组并对每个组执行多个语句)。
我尝试了很多方法,但没有一种方法可以使用嵌套循环。我知道如何使用其他方法和程序(如PROC SQL)获得每周销售,但我不确定我是否可以使用PROC SQL来配置分发。
我使用proc nlp使用最大似然法估计每个分布的参数。例如,如果我需要估算正态分布的Mu和Sigma,我使用以下代码:
proc nlp data= temp vardef=n covariance=h outest=parms;
title "Normal";
max loglik;
parms mu=0, sigma=1;
bounds sigma > 1e-12;
loglik=-log(sigma*(2*constant('PI'))**.5) - 0.5*((x-mu)/sigma)**2;
run;
这种方法会找到最有可能产生数据的Mu和Sigma。
答案 0 :(得分:1)
对于希望使用SAS内部分组的其他人,nlm
代码将成为:
/* Ensure that the data is sorted to allow group processing */
proc sort data = temp;
by week;
run;
proc nlp data = temp vardef = n covariance = h outest = parms;
/* Produce separate output for each week */
by week;
title "Normal";
max loglik;
parms mu = 0, sigma = 1;
bounds sigma > 1e-12;
loglik = -log(sigma * (2 * constant('PI'))**.5) - 0.5 * ((x - mu) / sigma)**2;
run;
以下是使用proc univariate
的方法:
/* Suppress printed output (remove to see all the details) */
ods select none;
proc univariate data = temp;
/* Produce separate output for each week */
by week;
histogram x /
/* Request fitting to normal distribution */
normal
/* You can select other distributions too */
lognormal;
/* Put the fitted parameters in a dataset */
ods output ParameterEstimates = parms;
/* Put the fit statistics in a dataset */
ods output GoodnessOfFit = quality;
run;
/* Restore printing output */
ods select all;
答案 1 :(得分:0)
这是我用过的东西
%macro weekly;
%do i=1 %to 55;
proc sql;
create table temp as
select location, UPC, date, x, week
from weeks
where week = &i;
quit;
/* I have here the rest of the code where I do my calculations and I fit the distributions to the data of each week */
%end;
%mend;
%weekly;
我知道proc sql最初会起作用,但我想知道是否有更有效的方法可以做到这一点。