夜雨聆风学习资料网

ARTICLE · 986402

Excel 实现系统抽样,分层抽样,WPS 居然出现 BUG!

Excel 实现系统抽样,分层抽样,WPS 居然出现 BUG!

抽样(Sampling)是统计学中,一种统计推论的办法。而在工作中,抽样也是很常见的手段,比如市场调研、质量评定、客户回访等,都会抽取一定的样品来分析观察,并依据所获得的数据对总体的特征得出具有一定可靠性的估计判断,从而达到对总体的认识。

而具体的抽样方式,则分为简单随机抽样、系统抽样(也叫等距抽样)、分层抽样、整群抽样。

  • 简单随机抽样: 随机选择样本,每个单位被选中的概率相等。

  • 系统抽样(等距抽样): 按固定间隔从有序列表中选择样本。

  • 分层抽样: 将总体划分为互不重叠的层,从每层中随机抽样。

  • 整群抽样: 将总体分为若干群体,随机抽取几个群体,对选中的群体进行全体调查。

以下介绍如何在Excel中实现系统抽样、简单随机抽样、分层抽样的办法

1. 系统抽样

系统抽样实际上是最容易的,因为只要确认好间隔即可,都不需要借助辅助列即可标记。

=IF(MOD(ROW()-1,ROUND((COUNTA(A:A)-1)/3,0))=0,"中奖","")

2. 简单随机抽样

简单随机抽样其实也简单,生成随机数,然后按照随机数大小排序,根据要抽取的样本数量取前几位即可。

但是,如果不想排序,直接标记呢?

=RAND()=INDEX(SORTBY(A2:A26,B2:B26,-1),SEQUENCE(3))

3. 分层抽样

其实分层抽样和简单随机抽样是很相似的,实际上是把总的样本数量分配到各组中去,这个比例可以是等比例或最优比例,而在每一层中,再分别随机抽样即可。

可能有人想到,每个组再分开写公式,不就好了么?当然可以,但是当组的数量也很大的时候,操作性就减少了。

=ROUND(COUNTIF(A:A,A2)/(COUNTA(A:A)-1)*40,0)=RAND()=COUNTIFS(A:A,A2,C:C,">"&C2)+1=IF(D2<=INDEX($B:$B,MATCH(A2,$A:$A,0)),"中奖","")

4. WPS的隐藏Bug

通常我们都会很信任公式,以为只要公式正确,就能得到正确的结果。但是这也有一个前提,软件本身没有Bug。

而我在研究这些抽样问题的时候,WPS竟然大概率出现Bug。当我进行分层抽样实验的时候,发现在确认完样本数量之后,最终“中奖人数”竟然会在36-40之间来回滚动。原来是确认范围顺序的时候,有时会出现重复排序,然而RAND()生成的随机数在区区几百行是几乎不可能出现重复值的,也就是说,WPS在判断C列随机数大小时,很容易出错。

WPS刷新随机数时大概率出现Bug

而在Excel 2010中,并不会出现这样的问题(下图)

Excel刷新随机数时未出现Bug

在用WPS的小伙伴们也不用灰心,只需要稍微修改一下公式即可,把原来的=RAND() 修改成 =RANDBETWEEN(100000,999999) ,在WPS中也能实现完美的分层抽样了。

不过在做一些套表时,若涉及到与无限循环小数的大小比较,还是有一定几率出现这样的Bug,建议还是可以安装一个Excel 2010版本,不占体积又很强,我们一直都用它

好了,本期内容就到这里,有什么更新建议,或者有什么难题要解决,欢迎评论区交流!

相关学习资料