我有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,但我不知道解决方案。谢谢你的建议。
答案 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项:
答案 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))))