如何在 Excel 或 SPSS 中随机 select 不包含特定值的列
How to randomly select column that does not contain a specific value in Excel or SPSS
谁知道 Excel 公式、VBA 或 SPSS 语法来执行以下操作:
在数据集或电子表格中创建一个新的 variable/column,该数据集或电子表格由随机选择的列(从 1-42 列的范围)的列号(或列标题)填充,提供中的值给定行的该列不包含 99。
在 Excel 中,我可以执行第一步并创建随机数并将它们与列匹配,但我不知道如何(或如果可能)'re-roll' 一个新的随机数,如果初始匹配列包含值 99.
我用于生成 1 到 42 之间的随机数以标识列的公式:
AQ=RANDBETWEEN(1,3)
对于 Excel 中的一行使用 9 行虚拟数据:=HLOOKUP(AQ,$A$1:$AP$9,2,FALSE)
这是一个如何重新滚动的示例...对于给定的行,我选择了 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
以下是如何使用 Python 在 SPSS 中进行处理:
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 的变量,然后计算包含 comlumn 编号的新变量。
编辑:添加了一个中断条件,这样它就不会无限循环,以防万一每个变量都包含 99
谁知道 Excel 公式、VBA 或 SPSS 语法来执行以下操作:
在数据集或电子表格中创建一个新的 variable/column,该数据集或电子表格由随机选择的列(从 1-42 列的范围)的列号(或列标题)填充,提供中的值给定行的该列不包含 99。
在 Excel 中,我可以执行第一步并创建随机数并将它们与列匹配,但我不知道如何(或如果可能)'re-roll' 一个新的随机数,如果初始匹配列包含值 99.
我用于生成 1 到 42 之间的随机数以标识列的公式: AQ=RANDBETWEEN(1,3)
对于 Excel 中的一行使用 9 行虚拟数据:=HLOOKUP(AQ,$A$1:$AP$9,2,FALSE)
这是一个如何重新滚动的示例...对于给定的行,我选择了 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
以下是如何使用 Python 在 SPSS 中进行处理:
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 的变量,然后计算包含 comlumn 编号的新变量。
编辑:添加了一个中断条件,这样它就不会无限循环,以防万一每个变量都包含 99