不知道为什么,但我真的在努力解决这个问题。 我想要获得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;
答案 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以这种方式为您完成工作。