如何在Excel或SPSS中随机选择不包含特定值的列

时间:2018-11-08 14:35:13

标签: excel vba spss

任何人都知道Excel公式,VBA或SPSS语法可以执行以下操作:

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

在Excel中,我可以执行第一步,创建随机数并将其与列匹配,但是如果初始匹配的列包含“随机数”,我不知道如何(或尽可能)“重新滚动”新的随机数值99。

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

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

2 个答案:

答案 0 :(得分:0)

这是一个如何重新滚动的示例...对于给定的行,我选择了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

答案 1 :(得分:0)

这里介绍了如何使用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的变量,然后计算包含列号的新变量。

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