【问题标题】:How to assign values randomly based on a percentage in SAS?如何根据SAS中的百分比随机分配值?
【发布时间】:2015-03-13 14:47:18
【问题描述】:

这个问题与 SAS 相关。我需要随机生成一个变量,我们称之为“物种”,其中 60% 的情况是 1,其余 40% 的情况是 0。有 15,000 个 x_1 案例(其中 x_1 是一个随机的、均匀分布的变量)需要分配 1 或 0。它必须使用 if-then-do 语句生成,对吗?到目前为止,我有:

data species_list;
    set work.species_list;
    if x_1 <= 0.6 then do;
        Species = 1;
    end;
    else if x_1 > 0.6 then do;
        Species = 0;
    end;
run;

这部分很简单。但是,我需要将 1 和 0 随机分配给 15,000 个案例,而不是基于某些不等式。

【问题讨论】:

    标签: variables statistics sas


    【解决方案1】:

    如果x_1 是一个随机的、均匀分布的变量,那么这种不等式确实会“随机”分布它们(无论如何,只要用计算机就可以做到)。

    据我回忆,您的不平等或多或少会起作用。它并不完美;很可能您的随机数的下限为 0,上限为 0.999999,因此它不会给出 完美 60/40 的分割,尽管使用 15000 您可能会看到相当接近的匹配。

    更好的方法是使用proc surveyselect。这不需要您的 x_1 变量。

    proc surveyselect data=species_list out=species_out samprate=0.6 outall seed=12345;
    run;
    

    这将采样 60% 并给他们一个 1,剩下的 40% 将是一个 0。很容易。

    【讨论】:

    • 对。不等式并不完美,但足以满足大量情况。
    【解决方案2】:

    如果您想在 SAS 中生成随机变量,可以使用 rand 函数。

    你可以使用:

    Species = ifn(rand("uniform") <= 0.6, 1, 0);
    

    或:

    x_1 = rand("uniform");
    if x_1 <= 0.6 then Species = 1;
    else Species = 0;
    

    取决于你更容易理解哪一个。

    • rand(dist [, parameters]) 生成一个随机数,该随机数是从多个分布之一生成的。
    • ifn(condition, trueValue, falseValue) 将返回其第二个或第三个(数字)参数,具体取决于条件的计算结果是真还是假。
    • 如果您只想运行一条语句,则无需将条件语句包装在 do; end; 中。
    • 如果您想要可重现的结果,您可以使用call streaminit 向 PRNG 提供种子。

    【讨论】:

    • call streaminit。 (您链接到了正确的页面,只是在这里打错了。)
    • 谢谢乔,确实是一个很大的错字。 (proc setinit 到 call streaminit)
    • 因此,假设 x_1 是一个随机均匀分布的变量,那么基于百分比的抽样是随机的……好吧。谢谢!
    猜你喜欢
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2021-05-21
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    相关资源
    最近更新 更多