如何检查相同的值组合,而不pipe它们的顺序如何

我已经得到了客户可能拥有的不同设备组合的长长列表。 看起来做清单的人只是连接了所有包含设备产品编号的列。 问题是,他们是如何填写列没有真正的秩序。 因此,先获得设备B,然后是设备A的客户现在将具有B / A的价值,而另一个客户也可以具有A / B的价值。 我试图用excel或SAS来找出有多less不同的组合,所以在这种情况下A / B = b / A,它们只会是1而不是2个组合。 有没有办法使用EXCEL或SAS来解决这个问题,因为现在我不得不眼球。 一如既往,非常感谢您的帮助!

在SAS中,将它们分解为组件值,然后对variables进行sorting。

data have; length value $50; input value $; datalines; GummyBears/Skittles Skittles/GummyBears MandMs/Skittles GummyBears/MandMs Skittles/MandMs GummyBears/MandMs ;;;; run; data want; set have; length vals1 vals2 $20; array vals[2] $; do _t = 1 to dim(vals); vals[_t]=scan(value,_t,'/'); end; call sortc(of vals[*]); run; proc freq data=want; tables vals1*vals2/list; run; 

如果你愿意,你也可以重新组合它们。

这是在不使用VBA的情况下在Excel中提供所有设备组合的快速方法。

在您的组合文本旁边,插入每个设备部件的列 – 每个设备一列 – 请参阅下面的草稿。 如果设备组合包含此色谱柱的设备,则每个色谱柱都返回TRUE,否则返回FALSE。

 EQUIPMENT CONTAINS_A CONTAINS_B CONTAINS_C CONTAINS_ D Sort_Column COMBINATION ------------------------------------------------------------------------------------------- A/B/C TRUE TRUE TRUE FALSE TRUETRUETRUEFALSE B/A/D/C TRUE TRUE TRUE TRUE TRUETRUETRUETRUE A/B TRUE TRUE FALSE FALSE TRUETRUEFALSEFALSE C FALSE FALSE FALSE TRUE FALSEFALSETRUEFALSE 

最后一列是将文本中的所有TRUE / FALSE值组合在一起。 这个文本可以被过滤和/或sorting,以便于识别唯一的组合。 如果您应用自动filter,自动filter中的条目将显示唯一的组合。

这些是我已经使用的值(在第二行显示公式)的公式:

 CONTAINS A: =NOT(ISERROR(SEARCH("A",F2,1))) CONTAINS B: =NOT(ISERROR(SEARCH("B",F2,1))) CONTAINS C: =NOT(ISERROR(SEARCH("C",F2,1))) CONTAINS D: =NOT(ISERROR(SEARCH("D",F2,1))) 

sorting栏:=文本(H2,“#”)和文本(I2,“#”)和文本(J2,“#”)和文本(K2,“#”)

对不起,这个格式,但我不允许张贴图像:-(希望它有帮助!

您可以使用条件格式来突出显示重复选项。 它仍然是眼球,但你可能会按颜色分类来查看匹配/不匹配的设备。

关于如何做到这一点的例子可以在这里find: http : //www.techrepublic.com/blog/window-on-windows/how-to-find-duplicates-in-excel/7347

您可以尝试编写一些可以在Excel中使用的VBA代码,以更改A和B在列中显示的方式。 例如,对于B / A,它将按字母顺序将其更改为A / B。 对于A / B,由于它已经按字母顺序排列,所以它会保持原样。 完成后,然后按该列对表格进行sorting。 您应该看到A / B这样的数据,下一行也可以显示A / B。 接下来,根据你需要完成的工作,你可以添加更多的VBA代码来组合按该types列的行,并将这些数据写入新的工作表。 这将为您提供所有客户拥有的所有独特设备types的唯一数量。 如果你想要独特的客户可能拥有A / B / C,并将A / B部分与仅拥有A / B的其他客户相结合,那么这将是一个更多的工作。

我已经有时间把它们放在一起作为一个Excel公式。 看到我原来的评论在本文的脚下链接到我的来源。

步骤来解决这个问题:

用户定义函数对单元进行sorting

在Excel VBA中创build一个新的模块(让我知道如果你需要这个说明,这只是几个点击)

复制并粘贴下面的所有代码。

 Option Explicit Const c_Separator = "/" ' User Defined Function to split a list within a cell and then sort it ' before recreating a sorted list Public Function CellSort(strString As String) As String Dim i As Integer Dim arr As Variant Dim strRet As String arr = Split(strString, c_Separator) ' trim values so sort will work properly For i = LBound(arr) To UBound(arr) arr(i) = Trim(arr(i)) Next i ' sort QuickSort arr, LBound(arr), UBound(arr) ' construct ordered list to return For i = LBound(arr) To UBound(arr) - 1 strRet = strRet & CStr(arr(i)) & c_Separator Next i ' Attach the last item separately to avoid adding an unecessary separator CellSort = strRet & CStr(arr(i)) End Function ' Quick Sort function found here: ' https://stackoverflow.com/questions/3399823/excel-how-do-i-sort-within-a-cell Public Sub QuickSort(vArray As Variant, inLow As Long, inHi As Long) Dim pivot As Variant Dim tmpSwap As Variant Dim tmpLow As Long Dim tmpHi As Long tmpLow = inLow tmpHi = inHi pivot = vArray((inLow + inHi) \ 2) While (tmpLow <= tmpHi) While (vArray(tmpLow) < pivot And tmpLow < inHi) tmpLow = tmpLow + 1 Wend While (pivot < vArray(tmpHi) And tmpHi > inLow) tmpHi = tmpHi - 1 Wend If (tmpLow <= tmpHi) Then tmpSwap = vArray(tmpLow) vArray(tmpLow) = vArray(tmpHi) vArray(tmpHi) = tmpSwap tmpLow = tmpLow + 1 tmpHi = tmpHi - 1 End If Wend If (inLow < tmpHi) Then QuickSort vArray, inLow, tmpHi If (tmpLow < inHi) Then QuickSort vArray, tmpLow, inHi End Sub 

closuresVBA编辑器(不需要更多的编码)。

Excel公式计算唯一组合的数量在Excel中,您可以在原始数据列旁边创build三列。 我在下面的屏幕截图中用彩色背景显示了这些公式。 每一个都在图像下面解释。

Excel公式

蓝色列:使用上面的VBA函数对原始列表中的每个单元格的内容进行sorting,这会给出一个一致的列表,您可以对独特的项目进行计数。 如果您的原始列表中有一些小写字母而另一些字母大写,并且您需要将它们视为相同,请修改此列中的公式为=CellSort(UPPER(A2))

绿色列:简单的COUNTIF函数(适用于所有最新的Excel版本),用于标识每个已sorting的单元格的第一个实例。

红色单元格:计算TRUE出现在绿色列中的次数。 这给出了唯一条目的计数。

下面是已完成工作的一个例子。

公式的例子在行动


原创意见

怕我现在没有时间来testing这个,但是这可能对你有帮助。

你可能想看看在这个答案给出的VBA(我没有尝试过自己)。

VBA QuickSort

然后,如果需要在公式中执行此操作,则可以从此VBA创build一个用户定义的函数,以对单元格中的值进行sorting。 更改行arr = Split(ActiveCell.Text, ",")具有"/"所以它会拆分你的列表。

接下来,在原始数据旁边的列中使用公式,然后使用类似此页面上的公式的内容: 对数据范围中的值或唯一值进行计数,以统计唯一值。

让我知道如果你需要更多的帮助上面的任何一个,我会尽力做到明天。