随机化n个唯一编号

时间:2015-01-27 17:43:26

标签: sas

不知道为什么,但我真的在努力解决这个问题。 我想要获得n个唯一的数字。 在这个例子中,我希望它是15号;

    %let maximum_draws = 15;

无论我尝试了什么(我在这里工作了几个小时,我得到了重复)。 有人可以解释一下原因吗?

    data test;
    array game(&maximum_draws);
    game(1) = int(ranuni(0)*15+1);
    do i = 2 to &maximum_draws;
        rand = int(ranuni(0)*15+1);
        do j = 1 to i-1;
            if rand eq game(j) then do while (rand eq game(j));
                rand = int(ranuni(0)*15+1);
            end;
        end;
        game(i) = rand;
    end;
    run;

2 个答案:

答案 0 :(得分:4)

您可以使用not in运算符进行更有效的测试以检查数字是否已被选中:

data test;
array game(&maximum_draws);
do i = 1 to &maximum_draws;
    do while (game(i) = .);
        rand = int(ranuni(0)*15+1);
        if rand not in game then game(i) = rand;
    end;
end;
run;

答案 1 :(得分:2)

另一个选择,如果你确定你有一个相对较小的(即,不是数十亿或其他东西)是显式创建值,然后从中选择。

%let maximum_draws=15;
%let draws=10;

data population;
  do game = 1 to &maximum_Draws.;
    output;
  end;
run;

proc surveyselect data=population out=games n=&draws;
run;

SAS以这种方式为您完成工作。