我已经获得了很多客户可能拥有的不同设备组合。看起来制作列表的人只是连接了包含设备产品编号的所有列。问题是他们的列填充方式并不是真正的顺序。因此,首先获得设备B然后获得设备A的客户现在具有B / A值,而另一个客户也可以具有A / B值。我正在尝试使用excel或SAS来确定订单中有多少不同的组合,因此在这种情况下A / B = b / A并且它们只是1,而不是2种组合。有没有办法用EXCEL或SAS来解决这个问题,因为现在我不得不注意它。一如既往地非常感谢你的帮助!!
距
答案 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中,您可以在原始数据列旁边创建三列。我在下面的屏幕截图中显示了这些公式,带有彩色背景的列。每个都在图像下面解释。
蓝色栏目:使用上面的VBA功能对原始列表中每个单元格的内容进行排序,这会给出一个一致的列表,您可以对其中的唯一项目进行计数。如果您的原始列表中的某些实例为小写,而其他实例为大写,您需要将它们视为相同,然后将此列中的公式修改为=CellSort(UPPER(A2))
绿色列:简单COUNTIF
函数(适用于所有最新的Excel版本),用于标识每个已排序单元格的第一个实例。
红色单元格:计算绿色列中出现TRUE的次数。这给出了唯一条目的计数。
以下是完成工作的一个例子。
原始评论
害怕我现在没有时间对此进行测试,但这可能对你有帮助。
你可能想看看这个答案中给出的VBA(我自己没试过)。
然后,如果需要在公式中执行此操作,则可以从此VBA创建用户定义函数以对单元格中的值进行排序。将行arr = Split(ActiveCell.Text, ",")
更改为"/"
,以便拆分列表。
接下来,在原始数据旁边的列中使用您的公式,然后使用此页面上的公式:Count occurrences of values or unique values in a data range来统计唯一。
如果您需要更多上述帮助,请告诉我,明天我会尝试这样做。