Excel,SAS,Python,因子级组合

时间:2018-01-04 19:41:33

标签: python excel sas combinations

我有4个因子A B C D,每个因子都有不同的等级,命名为
A1 A2 B1 B2 B3 C1 C2 C3 D1 D2 D3 D4 如何为每个级别设置因子组合:A1B1C1D1 A1B1C1D2 A1B1C1D3 A1B1C1D4 A2 B1 C1D1 ...... ..等。这种组合应该有2x3x4x4。

我可以使用Excel,SAS或Python,但我不知道解决方案。谢谢你的建议。

4 个答案:

答案 0 :(得分:0)

在Python中:

DFT

您还可以将因子的名称和级别的数量放在列表中并使用递归函数:

for a in range(1,3):
   for b in range(1,4):
      for c in range(1,5):
         for d in range(1,5):
            print "A%d B%d C%d D%d" % (a,b,c,d)

您甚至可以在因子列表中包含级别名称,如下所示:

factors = ['A', 'B', 'C', 'D']
levels = [2, 3, 4, 4]

def recurse(i, combination):
   if i < len(factors):
      for level in range(1, levels[i]+1):
         concat = factors[i] + str(level)
         recurse(i+1, combination+concat)
   else:
      print combination

recurse(0, '')

答案 1 :(得分:0)

在SAS中

data want;
format A B C D $2.;
format combination $8.;
do aa=1 to 2;
   A = catt("A",aa);
   do bb=1 to 3;
      B = catt("B",bb);
      do cc=1 to 3;
         C = catt("C",cc);
         do dd=1 to 5;
            D = catt("D",dd);
            combination=catt(A,B,C,D);
            output;
         end;
      end;
   end;
end;
drop aa bb cc dd;
run;

答案 2 :(得分:0)

使用Excel VBA:

Sub user()
    ZZ = 1
    For i = 1 To 4
        For j = 1 To 4
            For k = 1 To 4
                For l = 1 To 4
                    Cells(ZZ, 1) = "A" & i & "B" & j & "C" & k & "D" & l
                    ZZ = ZZ + 1
                Next l
            Next k
        Next j
    Next i
End Sub

将生成所有256项:

enter image description here

答案 3 :(得分:0)

如果您在列表中收集所有级别名称,如:

a

现在,如果您使用此代码查找列表中的唯一元素:

data=['A1', 'A2' ,'B1' ,'B2', 'B3' ,'C1' ,'C2' ,'C3' ,'D1' ,'D2', 'D3' ,'D4']

最后只使用带有r = len(unique_elements)的itertools生成组合,r =长度元组

track={}
for i in data:
    if int(list(i)[1]) not in track:
        track[int(list(i)[1])]=[i]
    else:
        track[int(list(i)[1])].append(i)

完整代码:

import itertools

print(list(itertools.combinations(data,r=len(track))))

输出:

data=['A1', 'A2' ,'B1' ,'B2', 'B3' ,'C1' ,'C2' ,'C3' ,'D1' ,'D2', 'D3' ,'D4']

track={}
for i in data:
    if int(list(i)[1]) not in track:
        track[int(list(i)[1])]=[i]
    else:
        track[int(list(i)[1])].append(i)



import itertools

print(list(itertools.combinations(data,r=len(track))))