【问题标题】:How to randomly select column that does not contain a specific value in Excel or SPSS如何在 Excel 或 SPSS 中随机选择不包含特定值的列
【发布时间】:2018-11-08 14:35:12
【问题描述】:

有谁知道 Excel 公式、VBA 或 SPSS 语法来执行以下操作:

在数据集或电子表格中创建一个新变量/列,该变量/列由随机选择的列(范围为 1-42 列)的列号(或列标题)填充,提供该列中的值给定的行不包含 99。

在 Excel 中,我可以执行第一步并创建随机数并将它们与列匹配,但如果初始匹配列包含值 99。

我的公式用于生成 1 到 42 之间的随机数来标识一列: AQ=RANDBETWEEN(1,3)

对于 Excel 中使用 9 行虚拟数据的行:=HLOOKUP(AQ,$A$1:$AP$9,2,FALSE)

【问题讨论】:

  • 考虑更详细地分享您的代码以及到目前为止您所尝试的内容。您将更有可能获得有用的帮助。
  • 您好,欢迎来到Stack Overflow!请拨打tour 并通读help center,了解我们将如何帮助您。 TL;DR:这不是一个代码编写服务,所以你必须提供你最好的机会并指出你卡在哪里,然后有人会帮助你解决这个特定问题。

标签: excel vba spss


【解决方案1】:

这是一个如何重新滚动的示例...对于给定的行,我选择了10,但您可以根据需要更改此设置

编辑 - 现在循环通过 givenRow:

Sub test()

    Dim randCol As Integer
    Dim givenRow As Long
    Dim saveCol As Integer: saveCol = 44 ' where to store results

    With ThisWorkbook.Worksheets("your sheet name")
        For givenRow = 1 To 100
            Do While True
                ' get column between 1 and 42
                randCol = Int(42 * Rnd + 1)
                ' if not 99 exit
                If .Cells(givenRow, randCol).Value <> 99 Then Exit Do
            Loop
            ' store results in saveCol for givenRow
            .Cells(givenRow, saveCol).Value = randCol
        Next
    End With

End Sub

【讨论】:

  • 谢谢你,完美!我想你不知道创建一个列的快速方法来保存返回的返回结果为 givenRows 1-100?
  • @P_Jefferies 通过添加For 循环来编辑答案以遍历第 1-100 行并将结果存储在第 44 列中......您可以更改该列号
  • @P_Jefferies Np,请小心,因为如果所有值连续为 99,它可能会永远循环
【解决方案2】:

以下是如何在 SPSS 中使用 Python 进行操作:

begin program. 
import spss, spssaux
import random

# get variable list
vars = spssaux.VariableDict().expand(spss.GetVariableName(0) + " to " + spss.GetVariableName(spss.GetVariableCount()-1))

proceed = True
breakcount = 0

while proceed:
# generate random integer between 0 and variable count -1, get random variable's             
# name and index-position in dataset
    rng = random. randint(0,spss.GetVariableCount() - 1)
    ranvar = spss.GetVariableName(rng)
    ind = int(vars.index(ranvar))

# read data from random variable, if value 99 is stored in the variable, go back to the top. if not, compute variable 
# random_column = column number (index +1 NOT index) 
    randat = spss.Cursor([ind])
    d = randat.fetchall()
    randat.close()  
    data = [str(x).strip('(),') for x in d]
    breakcount += 1
    if "99.0" not in data:
        spss.Submit("compute random_column = %s." %(ind + 1))
        proceed = False
    elif breakcount == 42:
        break

end program. 

它遍历随机变量,直到找到其中没有值 99 的变量,然后计算包含列号的新变量。

编辑:添加了一个中断条件,这样它就不会无限循环,以防万一每个变量都包含一个 99

【讨论】:

  • 感谢您。我正在与 SPSS 搏斗,以使 Essentials for Python 能够正常工作。它告诉我它没有安装,但它是......
猜你喜欢
  • 2014-08-04
  • 2021-09-15
  • 2012-03-10
  • 2017-01-07
  • 1970-01-01
  • 2012-03-10
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多