随机选择两个观察点并计算距离

时间:2015-06-04 06:43:41

标签: sas

我有一个数据集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记录。

1 个答案:

答案 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次观察