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 值会生成您要查找的内容。