SAS:从指数生成随机值
SAS: Generating random values from an exponential
我需要在现有数据集中添加一个新变量来模拟指数。我需要设置这个指数的 lambda,以便小于 1 的值的数量在 9% 到 14% 之间。
总结:
X ~ Expo(lambda)
将有 9% 到 14% 的值小于 1。
RANEXP(seed)
生成随机标准指数。将其除以 lambda。
x=ranexp(seed)/lambda;
使用带有'exponential'
参数的rand()
函数;但是,如果您希望 9% 到 14% 的值小于 1,则需要使用指数分布的 CDF 公式求解 Lambda。就个人而言,为了节省时间,我会模拟 Lambda 的一些值和 select 符合条件的值。
data findLambda;
do lambda = 0.05 to 0.5 by 0.05;
do i = 1 to 5000;
rand = rand('exponential')/lambda;
LessThan_1_Flag = (rand < 1);
output;
end;
end;
run;
proc freq data=findLambda;
by Lambda;
tables LessThan_1_Flag / nocum norow nocol nofreq;
run;
您会发现 0.04 到 0.09 之间的 lambda
值会生成您要查找的内容。
我需要在现有数据集中添加一个新变量来模拟指数。我需要设置这个指数的 lambda,以便小于 1 的值的数量在 9% 到 14% 之间。
总结:
X ~ Expo(lambda)
将有 9% 到 14% 的值小于 1。
RANEXP(seed)
生成随机标准指数。将其除以 lambda。
x=ranexp(seed)/lambda;
使用带有'exponential'
参数的rand()
函数;但是,如果您希望 9% 到 14% 的值小于 1,则需要使用指数分布的 CDF 公式求解 Lambda。就个人而言,为了节省时间,我会模拟 Lambda 的一些值和 select 符合条件的值。
data findLambda;
do lambda = 0.05 to 0.5 by 0.05;
do i = 1 to 5000;
rand = rand('exponential')/lambda;
LessThan_1_Flag = (rand < 1);
output;
end;
end;
run;
proc freq data=findLambda;
by Lambda;
tables LessThan_1_Flag / nocum norow nocol nofreq;
run;
您会发现 0.04 到 0.09 之间的 lambda
值会生成您要查找的内容。