Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL通过任意百分位数集进行人口统计模拟_Sql_Database_Test Data_Frequency Distribution_Data Generation - Fatal编程技术网

使用SQL通过任意百分位数集进行人口统计模拟

使用SQL通过任意百分位数集进行人口统计模拟,sql,database,test-data,frequency-distribution,data-generation,Sql,Database,Test Data,Frequency Distribution,Data Generation,正如标题所示,我想获取一些测试数据并将其塑造成一个令人信服的人口统计样本。 在百分位数排名表中我有一个任意的分布模式,21行描述百分位数,间隔5,描述排名的频率分布 通过这种方式,可以根据口味对人口统计特征进行建模,但这种技术可以应用于任何类型的模拟,具有任何数量的分层频率分布。如果生成的数据过于细粒度&需要更多的原子性,则可以创建适合每个百分位数范围的随机值 百分位频率 -------- ----------- 0 0 5 1 10 2 /~~~~~~~

正如标题所示,我想获取一些测试数据并将其塑造成一个令人信服的
人口统计样本。

百分位数排名表中
我有一个任意的分布模式,21行描述百分位数,间隔5,描述排名的
频率分布

通过这种方式,可以根据口味对人口统计特征进行建模,但这种技术可以应用于任何类型的模拟,具有任何数量的分层频率分布。如果生成的数据过于细粒度&需要更多的原子性,则可以创建适合每个百分位数范围的随机值

百分位频率
-------- -----------
0        0
5        1
10       2
/~~~~~~~~~~~/
40       7
45       8
50       8
55       9
60       8
/~~~~~~~~~~~/
90       3
95       2
100      1
作为最简单的例子,我想将此分布填充到一组预先存在的测试数据(“学生记录”)中,随机将每个百分位数分组(第80、85、90……)分配给相应的学生记录(10名学生、5名学生、3名学生……)

id lname fname dob centile
----------- ---------- ---------- ---------- --------
1本德布鲁克2016-10-07 5
2陈瑞亚2016-07-27 10
3 Acosta Jared 2017-02-15 10
/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/  
98 Maddox Cassady 2016-09-01 95
99麦当劳希瑟2018-02-20 95
100托德悉尼2017-03-12 100
在实践中,我希望以任意数量的学生记录为目标,并按比例分配百分位数。每组21个频率分布将显示不同的模式,甚至是高度倾斜的分布(指数分布、威布尔分布、拉普拉斯分布),每个都定制为预定义的用户集模式

DDL:

创建表格百分位数
(
频率整数
,百分位数
) ;
创建表格学生(
id整数标识(1,1)
,lastname varchar(255)
,名为varchar(255)
,出生日期);
插入百分位
(百分位数,频率)
价值观
(    0           ,    0           )
,(    5           ,    1           )
,(    10          ,    2           )
,(    15          ,    3           )
,(    20          ,    3           )
,(    25          ,    4           )
,(    30          ,    5           )
,(    35          ,    6           )
,(    40          ,    7           )
,(    45          ,    8           )
,(    50          ,    8           )
,(    55          ,    9           )
,(    60          ,    8           )
,(    65          ,    8           )
,(    70          ,    7           )
,(    75          ,    6           )
,(    80          ,    5           )
,(    85          ,    4           )
,(    90          ,    3           )
,(    95          ,    2           )
,(    100         ,    1           );
插入到学生中
([LastName]、[FirstName]、[dob])
价值观
(“本德”、“布鲁克”、“2016-10-07”)
,(“Chan”、“Raya”、“2016-07-27”)
,(“Acosta”、“Jared”、“2017-02-15”)
,(‘蔡斯’、‘利亚’、‘2017-09-05’)
,(“杰斐逊”、“吉赛尔”、“2016-09-15”)
,(“保罗”、“圣人”、“2017-04-02”)
,('Mckinney'、'Shaine'、'2018-02-15')
,(“钥匙”、“伯莎”、“2016-05-12”)
(“多诺万”、“摩根”、“2016-10-25”)
,(“格雷夫斯”、“吉尔”、“2016-07-14”)
,(‘Chan’、‘Hille’、‘2016-08-02’)
,(‘达文波特’、‘莫莉’、‘2017-04-08’)
,('Mccoy'、'Ayanna'、'2016-07-18')
,(“头部”、“卡姆登”、“2016-06-25”)
,(“希克曼”、“里萨”、“2016-05-23”)
,(“萨拉扎”、“常春藤”、“2017-05-22”)
,(‘海德’、‘凯恩’、‘2017-06-12’)
,(“艾伦”、“卡罗尔”、“2018-01-09”)
,(“奎因”、“菲利普”、“2016-12-21”)
,(《波拉德》,《亚里士多德》,《2017-06-16》)
,(‘辛顿’、‘科罗拉多’、‘2017-02-09’)
,(“霍华德”、“尼赫鲁”、“2018-02-03”)
,(“钱伯斯”、“希拉里”、“2016-09-08”)
,(“帕迪拉”、“沃伦”、“2017-05-29”)
,(《拉特利奇》,《柏拉图》,《2016-07-31》)
,(‘古德曼’、‘塞琳娜’、‘2017-12-07’)
,(‘Bean’、‘Stewart’、‘2017-04-10’)
,(“Tran”、“Sacha”、“2016-10-15”)
,(‘施罗德’、‘凯’、‘2017-10-04’)
,(“库珀”、“菲利斯”、“2016-11-27”)
,(‘皮尔斯’、‘玛德琳’、‘2018-02-16’)
,(‘李’、‘基博’、‘2018-03-22’)
,(‘罗伯斯’、‘利比’、‘2016-09-03’)
,(“Riley”、“Veronica”、“2018-03-03”)
,(“展位”、“温特”、“2018-04-09”)
,(‘鸟’、‘优生尼亚’、‘2017-04-06’)
(“莫顿”、“莱德”、“2016-10-14”)
,(“Tanner”、“Paloma”、“2017-08-25”)
,(“鲍尔斯”、“科尔顿”、“2018-03-05”)
,(“麦卡锡”、“罗斯”、“2017-04-17”)
,(‘弗洛伊德’、‘内韦’、‘2017-08-15’)
(“麦克尼尔”、“Ria”、“2017-11-18”)
,(“霍夫曼”、“敖德萨”、“2018-03-26”)
,('Christian'、'Vanna'、'2016-05-16')
,(“美世”、“麦迪逊”、“2017-01-31”)
,(“弗兰克斯”、“安吉拉”、“2016-07-31”)
,(“Obrien”、“Desirae”、“2016-08-03”)
,(‘墙’、‘埃尔莫’、‘2017-02-25’)
,(‘弗洛雷斯’、‘哈基姆’、‘2016-09-12’)
,(“沃勒”、“德米特里厄斯”、“2018-02-28”)
,(‘萨维奇’、‘玛拉’、‘2018-02-02’)
,(“威尔克森”、“日尔曼”、“2018-01-23”)
,('Ramirez','Aphrodite','2017-05-31')
,('Fischer','Amery','2017-07-19')
,(‘斯威尼’、‘厄普顿’、‘2017-01-18’)
,(‘乔伊纳’、‘西蒙’、‘2017-11-18’)
,(“邓恩”、“洛根”、“2017-04-14”)
,(‘泰勒’、‘香农’、‘2017-05-27’)
(“迪拉德”、“弗里茨”、“2016-12-28”)
,(‘莫兰’、‘鲁尼’、‘2017-12-08’)
,(‘洛根’、‘亨特’、‘2016-11-06’)
,(《赌博》,《泰龙》,《2017-04-08》)
,('Mckay'、'Quon'、'2017-08-22')
,(“利文斯顿”、“怀利”、“2017-02-21”)
,(‘亨斯利’、‘昆西’、‘2018-01-08’)
(“麦克马洪”、“梅雷迪斯”、“2018-04-26”)
,(“花卉”、“扎奇里”、“2018-01-29”)
,(《牧羊人》,《开罗》,《2017-01-25》)
,(《甜蜜》、《莎拉》、《2017-10-30》)
,(“牛顿”、“卡尔文”、“2017-07-22”)
,(“Cameron”、“Paloma”、“2016-09-07”)
,(“库姆斯”、“沃伦”、“2017-01-14”)
,(‘阿亚拉’、‘加里’、‘2018-04-16’)
,(“胡子”、“雪莉”、“2018-01-02”)
,(“威特”、“安东尼”、“2017-09-14”)
,(‘加纳’、‘库恩’、‘2016-06-12’)
,(‘彼得森’、‘马里斯’、‘2017-11-20’)
,('Noble'、'Igor'、'2018-03-18')
,(《阿德金斯》,《以赛亚》,《2017-03-20》)
,('Mcclain'、'Gillian'、'2016-09-01')
,(‘亨森’、‘伯特’、‘2016-06-30’)
,
with c as (
      select c.*,
             ((sum(frequency) over (order by centile) - frequency) / sum(frequency * 1.0) over ()) as lb,
             (sum(frequency) over (order by centile) / sum(frequency * 1.0) over ()) as ub
      from centiles c
     )
select s.*, c.centile
from (select s.*,
             rand(checksum(newid())) as randish
      from students s
     ) s join
     c
     on s.randish >= c.lb and s.randish < s.ub;