如何检查相同的值组合,无论其顺序如何

时间:2013-04-04 14:44:12

标签: excel unique sas combinations

我已经获得了很多客户可能拥有的不同设备组合。看起来制作列表的人只是连接了包含设备产品编号的所有列。问题是他们的列填充方式并不是真正的顺序。因此,首先获得设备B然后获得设备A的客户现在具有B / A值,而另一个客户也可以具有A / B值。我正在尝试使用excel或SAS来确定订单中有多少不同的组合,因此在这种情况下A / B = b / A并且它们只是1,而不是2种组合。有没有办法用EXCEL或SAS来解决这个问题,因为现在我不得不注意它。一如既往地非常感谢你的帮助!!

5 个答案:

答案 0 :(得分:3)

在SAS中,将它们拆分为组件值,然后对变量进行排序。

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;

如果您愿意,也可以在之后重新组合它们。

答案 1 :(得分:1)

这是在不使用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值组合在一起。可以过滤和/或分类该文本以容易地识别唯一组合。如果您应用自动过滤器,则自动过滤器中的条目将显示唯一的组合。

这些是我在值后面使用的公式(显示第2行中的公式):

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)))

排序列:= TEXT(H2,“#”)& TEXT(I2,“#”)&文字(J2,“#”)& TEXT(K2, “#”)

很抱歉这个格式但我不允许发布图片:-( 希望能帮助到你!

答案 2 :(得分:0)

您可以使用条件格式设置突出显示重复项选项。它仍然会引人注目,但你可能会按颜色排序以查看匹配/不匹配的设备。

有关如何执行此操作的示例,请访问:http://www.techrepublic.com/blog/window-on-windows/how-to-find-duplicates-in-excel/7347

答案 3 :(得分:0)

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

答案 4 :(得分:0)

我有时间将这些作为Excel公式放在一起。请参阅此帖子底部的原始评论,以获取我的来源链接。

解决此问题的步骤:

用于对单元格进行排序的用户定义函数

在Excel VBA中创建一个新模块(如果您需要有相关说明,请告知我们,只需点击几下)

复制并粘贴以下所有代码。

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

关闭VBA编辑器(不再需要编码)。

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

Excel formulas

蓝色栏目:使用上面的VBA功能对原始列表中每个单元格的内容进行排序,这会给出一个一致的列表,您可以对其中的唯一项目进行计数。如果您的原始列表中的某些实例为小写,而其他实例为大写,您需要将它们视为相同,然后将此列中的公式修改为=CellSort(UPPER(A2))

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

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

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

Example of formulas in action


原始评论

害怕我现在没有时间对此进行测试,但这可能对你有帮助。

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

VBA QuickSort

然后,如果需要在公式中执行此操作,则可以从此VBA创建用户定义函数以对单元格中的值进行排序。将行arr = Split(ActiveCell.Text, ",")更改为"/",以便拆分列表。

接下来,在原始数据旁边的列中使用您的公式,然后使用此页面上的公式:Count occurrences of values or unique values in a data range来统计唯一。

如果您需要更多上述帮助,请告诉我,明天我会尝试这样做。

相关问题