我有一个数据集,代表三年内的销售量:
data test;
input one two three average;
datalines;
10 20 30 .
20 30 40 .
10 30 50 .
10 10 10 .
;
run;
我正在寻找一种方法来找到三年的中间点,即平均销售点
更新的数据集将会读取
data test;
input one two three average;
datalines;
10 20 30 2
20 30 40 1.5
10 30 50 2.1
10 10 10 1.5
;
run;
因此,基本上寻找销售中途发生的三年中的哪一部分。
欣赏。
编辑:我一直在尝试使用重量和过程意味着
我一直试图使用proc手段和体重功能,但它并没有给我三年的平均值
proc means data=test noprint;
var one two three;
var one+two+three=total;
var (one+two+three)/3=Average;
var Average/weight=Average_Year;
output out=testa2
sum(Total) =
mean(Total) = ;
run;
答案 0 :(得分:0)
我认为你的第二个例子是错误的,average
的正确值实际上是1.833而不是1.5。如果我做对了,以下数据步骤代码可以满足您的需求:
data want;
set test;
array years[3] one two three;
total = one + two + three;
midpoint = total / 2;
do i = 1 by 1 until(cum_total >= midpoint);
cum_total = sum(cum_total,years[i]);
end;
average = i - 1 + (midpoint - (cum_total - years[i]))/years[i];
run;
我认为很难通过proc means
重现这个逻辑,因为average
并不直接对应于我所知道的任何众所周知的统计数据。它更像是某种加权中位数,具有统一的评级。