【发布时间】:2017-05-09 00:09:59
【问题描述】:
有没有办法在不存储循环中的所有值的情况下计算第 5 个和第 95 个百分位数?
%let it=10000;
data test;
length arrayStore$32767;
arrayStore='';
sum=0;
min=99999;
max=-99999;
do i=1 to ⁢
number=rand('Uniform');
sum + number;
if number<min then min=number;
if number>max then max=number;
arrayStore=catx(' ',arrayStore,round(number,0.1));
end;
mean=sum/⁢
P5=0; *?;
p95=0; *?;
* count numbers in arrayStore;
do j=1 to countw(arrayStore, ' ', 's');
end;
run;
我认为这是不可能的,但是实现这一目标的最佳选择是什么?
将值存储在一个字符串中,对它们进行排序并找到第 x 个位置? 还是将它们存储在 10k 个数字变量中?
我已经尝试将数字存储在不同的记录(行)中,但这导致我需要很长时间才能排序的 34Gb 数据集,而我实际上只需要平均值以及 P2_5 和 P97_5 值。我正在尝试存储更少的值以加快计算速度。
谢谢!
【问题讨论】:
-
您是否有理由尝试在数据步骤中计算汇总统计信息,而不是使用 proc 均值或单变量?
-
@Reeza 是的,我想要 2.5 和 97.5 个百分位数(不是 proc 的意思)而不需要排序(不是 proc 单变量)
-
为什么不是proc的意思?工作的最佳工具
-
@Reeza 因为 proc 表示不允许 2.5 和 97.5 个百分位数
-
然后使用 proc 单变量,您可以在其中指定百分位数。
标签: sas mean median percentile datastep