随机化 n 个唯一数字
Randomize n unique number
不知道为什么,但我真的很难解决这个问题。
我正在尝试获取 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;
您可以使用 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;
如果您确定自己有相对较小的(即,不是数十亿之类的)另一种选择是显式创建值,然后从中选择。
%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 以这种方式为您完成工作。
不知道为什么,但我真的很难解决这个问题。 我正在尝试获取 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;
您可以使用 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;
如果您确定自己有相对较小的(即,不是数十亿之类的)另一种选择是显式创建值,然后从中选择。
%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 以这种方式为您完成工作。