随机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 random
到 set random(obs=100000)
例如。尽管请注意,这将是 'sample pairs',所以 100,000 会给您的 want
数据集 50,000 个观测值
我有一个包含数字列 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 random
到 set random(obs=100000)
例如。尽管请注意,这将是 'sample pairs',所以 100,000 会给您的 want
数据集 50,000 个观测值