随机select两次观察并计算距离

randomly select two observation and calculate the distance

我有一个包含数字列 x 的数据集 have。我想随机 select 任意两个不同的点,然后计算它们之间的距离。

如果我只做一次,那么我就用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 次?每次以相等的概率 selected 两个点,最后我有 1000000 个 dist 记录。

如何将输入数据集重新排序为随机顺序,然后计算每秒钟观察的距离?

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 randomset random(obs=100000) 例如。尽管请注意,这将是 'sample pairs',所以 100,000 会给您的 want 数据集 50,000 个观测值