【问题标题】:Formatting data for clogit model为clogit模型格式化数据
【发布时间】:2015-01-28 08:04:26
【问题描述】:

我进行了一项调查,有 53 名受访者每人回答 8 个问题。

目前它在 Excel 文档中,格式为:

人# |第一季度 | Q2 |第三季度 |第四季度 | Q5 | Q6 | Q7 | Q8

每个问题都有三个可能的答案,“1”、“2”或“3”。对于给定的人,每个问题都有一个数字表示响应。

我需要将每个人的答案转换为一个长列向量,其中三个选项中的每一个的响应都以二进制编码。所以对于每个人来说,应该有 24 行(每个问题 3 行),对于每个问题,应该有 1 行(表示做出的选择)和 2 行 0。

我已经尝试在 Excel 和 R 中执行此操作,但如果不手动输入每个值,我无法弄清楚如何执行此操作。

请告诉我有更好的方法吗?

【问题讨论】:

  • 你考虑过用 VBA 做这个吗?
  • @chrisneilsen 如果可以的话,我可以手动输入所有内容,因为我需要花时间弄清楚如何使用 VBA 来完成

标签: r excel choice


【解决方案1】:

查看代码作为内联 cmets 的解释

Sub Demo()
    Dim wsSource  As Worksheet
    Dim wsDest As Worksheet
    Dim rSource As Range
    Dim rDest As Range
    Dim vSource As Variant

    Dim i As Long, j As Long

    '--> adjust to suit your needs
    ' set up source and destination references
    Set wsSource = Worksheets("SourceData")
    Set wsDest = Worksheets("DestData")

    '--> adjust to suit your needs
    ' Assumes source data has header in row 1, names in column A and responces in B..I
    With wsSource
        Set rSource = .Range(.Cells(2, 9), .Cells(.Rows.Count, 1).End(xlUp))
    End With

    '--> adjust to suit your needs
    ' Assumes generated data starts as cell A1
    Set rDest = wsDest.Cells(1, 1)

    ' Get Source data
    vSource = rSource.Value

    ' Size Destination data array
    ReDim vDest(1 To UBound(vSource, 1) * 24, 1 To 2)

    ' Generate reformated data
    For i = 1 To UBound(vSource, 1) ' For each Person
        For j = 1 To 24 ' Add person name
            vDest((i - 1) * 24 + j, 1) = vSource(i, 1)
        Next
        For j = 1 To 8 ' Code 8 results
            vDest((i - 1) * 24 + (j - 1) * 3 + 1, 2) = IIf(vSource(i, j + 1) = 1, 1, 0)
            vDest((i - 1) * 24 + (j - 1) * 3 + 2, 2) = IIf(vSource(i, j + 1) = 2, 1, 0)
            vDest((i - 1) * 24 + (j - 1) * 3 + 3, 2) = IIf(vSource(i, j + 1) = 3, 1, 0)
        Next
    Next

    ' Place result on sheet
    rDest.Resize(UBound(vDest, 1), UBound(vDest, 2)) = vDest

End Sub

【讨论】:

  • 效果很好,非常感谢!当我有机会真正了解如何重现类似的东西时,我将不得不深入研究。
猜你喜欢
  • 1970-01-01
  • 2013-06-04
  • 2015-04-29
  • 2014-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-15
  • 1970-01-01
相关资源
最近更新 更多