在T-SQL中生成Bootstrapped示例

时间:2014-08-22 15:56:05

标签: sql-server tsql random-sample

有没有人对如何在T-SQL中生成自举的行样本有一些想法?使用NEWID()RAND()等问题然后进行排序的问题是,您最终会生成随机样本而无需替换。引导应该通过替换采样来完成。

1 个答案:

答案 0 :(得分:2)

这是一个解决方案。它首先为人口表中的每一行分配一个行标识符。

接下来,使用通过视图和RandMod()函数调用RAND()来生成1和行的行数之间的均匀随机整数,如Question 3531450中所述。

将这两个查询连接在一起以创建具有替换的随机样本。

获得大小为K<的自举样本。 N,按NEWID()排序并抓住前K行。

SELECT TOP K 
    key
    , NEWID()
FROM 
(
    SELECT CAST(1 + (SELECT COUNT(*) FROM table))*RandMod() AS int) AS rowchoice
    FROM table
) AS r
LEFT OUTER JOIN
(
    SELECT key
        , ROW_NUMBER() OVER(ORDER BY key) AS rowid
    FROM table
) AS t
ON rowchoice = rowid
ORDER BY 2