【问题标题】:randomly select two observation and calculate the distance随机选择两个观察值并计算距离
【发布时间】:2015-06-04 06:43:40
【问题描述】:

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

【问题讨论】:

  • 目前我在宏中使用 %do 循环来执行此操作。但这太慢了;

标签: sas


【解决方案1】:

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

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 个观察结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2012-05-19
    • 1970-01-01
    相关资源
    最近更新 更多