我有以下格式的大量数据:
之前
我是VBA的新手,但我正致力于整合这些数据,以便将其输入SPSS。出于我们的目的,它需要看起来像这样:
后
这个想法是所有具有匹配ID号的行被组合成 n 长度的单行。如图所示,行数不一致。此外,我们需要能够处理空白单元格 - 在某些情况下,可能不会输入值或长度,但下一行需要从标题的正确位置开始。
我已经在Bash中多次这样做了,但我的妻子需要能够自己重现这一点,因为有很多这类数据的电子表格。
我目前正在弄清楚语法并将其写出来,我最初的方法是过滤唯一ID,复制到第二张,然后执行For Each循环以附加数据。
我粘贴了我的代码,但它在当前阶段比起任何有用的东西更多地分散注意力。任何有关此方法的见解都会非常受欢迎,特别是如果有更容易或更少的税收方式。
感谢阅读! 麦克
答案 0 :(得分:1)
这是我在上面评论中描述的方法:
我可能会查看对行的迭代,构建一个分隔的字符串(逗号或制表符分隔)来表示每个"行"在格式化的输出中,基于ID,然后将其写入可以通过SPSS轻松读取的TXT文件
这是代码。它略高于我估计的30行:)
Sub FormatDataFileForSPSS()
Dim rng As Range 'the range representing the entire set of data to be formatted
Dim r As Range 'row iterator for the data table
Dim key As Variant 'id number
Dim rowData As String 'concatenated row data
Dim outputPath As String 'the place to put the output file
Dim outputFile As String 'the file name
'--- REQUIRES REFERENCE TO MICROSOFT SCRIPTING RUNTIME ---
Dim dict As Scripting.Dictionary 'a dictionary that we will use to concat each row by ID
Dim fso As Scripting.FileSystemObject 'used to write the output file
'Begin procedure here...
'Allow the user to select a range of data to format
' do NOT select the "header" row!
Set rng = Application.InputBox("Select the data to be formatted", "Select Data", Type:=8)
'Create the dictionary:
Set dict = CreateObject("Scripting.Dictionary")
'get the destination for the output file:
outputPath = CreateObject("Wscript.Shell").SpecialFolders("Desktop") 'Or modify to use a different filepath
outputFile = outputPath & "\my output.txt" 'Modify as needed
'Iterate the data table:
For Each r In rng.Rows
'get the key value
key = r.Cells(1, 1).Value
'Concatenate the row data to a string
rowData = r.Cells(1, 2) & vbTab & r.Cells(1, 3) & vbTab & r.Cells(1, 4) & vbTab & r.Cells(1, 5)
'Check if this KEY value already exists
If Not dict.Exists(key) Then
'if not, then add it to the dictionary
dict.Add key, rowData
Else:
'Append to the existing key's value:
dict(key) = dict(key) & vbTab & rowData
End If
Next
'Create our FileSystemObject to write the text file:
Set fso = CreateObject("Scripting.FileSystemObject")
With fso.CreateTextFile(Filename:=outputFile, overwrite:=True, unicode:=False)
For Each key In dict.Keys
.WriteLine dict(key)
Next
.Close
End With
End Sub
以制表符分隔的形式输出,没有标题行(因为示例中的标题不是唯一的开头)。我相当确定您可以在SPSS中指定导入没有标题行的数据,并且它将分配默认变量名称,以后可以根据需要进行修改。
以下是在SPSS中查看的数据(按照提示打开分隔的文本文件)
或者您可以在Excel中打开TXT delmited文件并按照一些提示进行操作,将其指定为制表符分隔符,然后您可以在Excel文件中添加标题信息: