ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 680|回复: 2

[求助]从原始数据中生成新的样本,每个样本缺一个值

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-10-1 21:45 | 显示全部楼层 |阅读模式
       有一组原始数据arr(),先需要构造新的样本,样本的特点是:第i个样本是由原始数据中去除掉第i个值后构成的,eg. Sample_1={arr(2),arr(3),arr(4)……arr(n)}、Sample_2={arr(1),arr(3),arr(4),……arr(n)}、Sample_3={arr(1),arr(2),arr(4),arr(5),……arr(n)}·······Sample_n={arr(1),arr(2),arr(3),……arr(n-2),arr(n-1)}。
我用三种方法来处理,分别是:1. 置第i个样本的第i个值为“”,而后用Application.Trim来处理;2. 直接用VBA.Filter进行过滤;3. 采用两层循环的方式生成样本。
       上述的处理方法对应附件中的Sub Test1、Sub Test2和Sub Test3。现在的问题是前两个Sub运行时都提示“类型不匹配”;Sub Test3运行时,可以正确构造样本,但是计算个样本均值、中位数和标准差时出问题。
       烦请大神和大牛帮我看看:
       1、我的三种方法可行吗?如果可行,我的代码错在哪?
       2、有没有更好的方法呢?
       详见附件,不甚感激!


数组Filter.rar (88.89 KB, 下载次数: 1)

TA的精华主题

TA的得分主题

发表于 2014-10-1 22:32 | 显示全部楼层
本帖最后由 yaozong 于 2014-10-1 22:59 编辑
  1. Private Sub CommandButton1_Click()
  2.     Dim arr, brr, ar, br, n&
  3.     arr = [a2:q17]
  4.     For n = 2 To 17
  5.        ar = Application.Index(arr, 0, n)
  6.        ar = Split(Application.Trim(Join(Application.Transpose(ar))))   ''除空
  7.        Cells(24, n).Resize(UBound(ar) + 1) = Application.Transpose(ar)   ''赋值→第n列的区域
  8.     Next
  9.     brr = [b24:q38]
  10.     ReDim crr(1 To 3, 1 To 16)
  11.     For n = 1 To 16
  12.        br = Application.Index(brr, 0, n)
  13.        crr(1, n) = Application.Average(br)
  14.        crr(2, n) = Application.Median(br)
  15.        crr(3, n) = Application.StDev(br)
  16.     Next
  17.     [b18].Resize(3, 16) = crr
  18. End Sub
复制代码

数组Filter-2.zip

91.4 KB, 下载次数: 2

TA的精华主题

TA的得分主题

发表于 2014-10-1 22:57 | 显示全部楼层
或:
  1. Private Sub CommandButton1_Click()
  2.     Dim arr, ar, n&
  3.     arr = [a2:q17]
  4.     ReDim brr(1 To 3, 1 To 16)
  5.     For n = 2 To 17
  6.        ar = Application.Index(arr, 0, n)
  7.        ar = Split(Application.Trim(Join(Application.Transpose(ar))))   ''除空
  8.        Cells(24, n).Resize(UBound(ar) + 1) = Application.Transpose(ar)   ''赋值→第n列的区域
  9.        brr(1, n - 1) = Application.Average(Cells(24, n).Resize(15))
  10.        brr(2, n - 1) = Application.Median(Cells(24, n).Resize(15))
  11.        brr(3, n - 1) = Application.StDev(Cells(24, n).Resize(15))
  12.     Next
  13.     [b18].Resize(3, 16) = brr
  14. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-3-29 05:34 , Processed in 0.032891 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表