在SAS中,有没有一种不用存储循环值就可以计算百分位数的方法?
有没有一种方法可以计算第5个和第95个百分位,而不存储循环中的所有值在SAS中,有没有一种不用存储循环值就可以计算百分位数的方法?,sas,mean,median,percentile,datastep,Sas,Mean,Median,Percentile,Datastep,有没有一种方法可以计算第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<m
%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;
%让它=10000;
数据测试;
长度阵列存储$32767;
arrayStore='';
总和=0;
最小值=99999;
最大值=-99999;
i=1到&it;
数字=兰特(‘统一’);
和+数;
如果numbermax,则max=number;
arrayStore=catx(“”,arrayStore,圆形(数字,0.1));
结束;
平均值=总和/&it;
P5=0;*?;
p95=0;*?;
*计算arrayStore中的数字;
doj=1到countw(arrayStore,,'s');
结束;
跑
我认为这是不可能的,但那实现这一目标的最佳选择是什么呢
将值存储在字符串中,对其进行排序并查找第X个位置?
或者将它们存储在10k数值变量中
我已经尝试将数字存储在不同的记录(行)中,但这导致我使用了一个34Gb的数据集,它需要很长时间来排序,而我实际上只需要平均值以及P2_5和P97_5值。我试图存储更少的值,以加快计算速度
谢谢 我认为,如果您将随机数存储在临时数组中并使用SAS描述性统计函数,您可以更直接地得到您想要的
%let it=10000;
data test;
call streaminit(811486001);
array x[&it] _temporary_;
do i=1 to ⁢
x[i] = round(rand('Uniform'),.01);
end;
mean = mean(of x[*]);
p05 = pctl(5,of x[*]);
p95 = pctl(95,of x[*]);
put 'NOTE: ' (p:)(=);
run;
%put NOTE: &=sysrandom;
我认为,如果将随机数存储在临时数组中并使用SAS描述性统计函数,您可以更直接地获得所需的数据
%let it=10000;
data test;
call streaminit(811486001);
array x[&it] _temporary_;
do i=1 to ⁢
x[i] = round(rand('Uniform'),.01);
end;
mean = mean(of x[*]);
p05 = pctl(5,of x[*]);
p95 = pctl(95,of x[*]);
put 'NOTE: ' (p:)(=);
run;
%put NOTE: &=sysrandom;
IMO表示,Proc单变量法是一种更好的方法
proc univariate data=sashelp.class noprint;
var weight;
output out=want pctlpts=2.5 97.5 PCTLPRE=P;
run;
proc print data=want;
run;
IMO表示,Proc单变量法是一种更好的方法
proc univariate data=sashelp.class noprint;
var weight;
output out=want pctlpts=2.5 97.5 PCTLPRE=P;
run;
proc print data=want;
run;
有没有什么原因让你试图在数据步骤中计算汇总统计数据,而不是使用proc均值或单变量?@Reeza是的,我想要2.5和97.5个百分位数(不是proc均值),而不需要排序(不是proc单变量)为什么不使用proc均值?最佳工具job@Reeza因为proc-means不允许使用2.5和97.5个百分位数,所以请使用proc-univariate,您可以在其中指定百分位数。您试图在数据步骤中计算汇总统计信息而不是使用proc-means或单变量,这有什么原因吗?@Reeza是的,我想要2.5和97.5个百分位数(不是proc-means)不需要排序(不是proc单变量)为什么不是proc的意思?最佳工具job@Reeza因为proc means不允许使用2.5和97.5%的百分比,所以使用proc单变量,您可以在其中指定百分比。