我有一个数据集have
,数字列为x
。我想随机选择任意两个不同的点,然后计算它们之间的距离。
如果我只做一次,那么我只使用proc surveyselect
生成另一个带有两个obs的数据集。
proc surveyselect data=have out=want method=srs
sampsize=2;
run;
data out;
set have end=eof;
dist = abs(dif1(x));
if eof;
run;
但我怎么能多次这样做,比如说1000000?每次选择两个具有相同概率的点时,最后我有1000000个dist记录。
答案 0 :(得分:3)
如何将输入数据集重新排序为随机顺序,然后计算每次观察的距离?
proc sql ;
create table random as
select *, ranuni(0) as randorder
from have
order by randorder
;quit ;
data want ;
set random;
dist=abs(dif1(x)) ;
if _n_/2=int(_n_/2) ;
run;
如果您需要指定要计算的特定数量的样本,则可以将更新set random
添加到set random(obs=100000)
。虽然注意到这将是“样本对”。因此,100,000将为您的want
数据集提供50,000次观察