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