【问题标题】:Looping through multiple string variables to generate outcome variable of presence/absence循环遍历多个字符串变量以生成存在/不存在的结果变量
【发布时间】:2019-03-15 19:55:23
【问题描述】:

我有一个非常大的数据集,每个患者有多个诊断 (25),由 SPSS 中的 ICD 10 代码表示。为简洁起见,我发布了我尝试复制的内容的快照,该快照仅使用标记为 DIAG1 到 DIAG3 的 3 个字符串变量和随机代码的测试数据集。

假设每一行代表一个病人。 “O74”列中显示的结果是我试图复制的结果,但到目前为止无济于事(只需手动输入我希望使用语法复制的内容)。本质上是一个存在/不存在二分变量,其中“1”代表在任一“DIAG”列中诊断为“O74”的患者。我尝试过:

do repeat x = DIAG1 to DIAG3.
compute O74 = any(x,"O74001", "O74019").
end repeat.
EXECUTE.

但是,在运行语法时,仅出现上述两个在 DIAG3 中列出的代码的出现。鉴于我非常差的语法技能,我无法理解为什么在使用上述“重复”代码时,DIAG1 和 DIAG2 中的 O74001 和 O74019 的发生率没有包含在变量“O74”中。

理想情况下,我只想在“重复”或“循环”中包含“O74”,而不是输入每个单独的 ICD 代码。语法:

compute flag = char.index(UPPER(DIAG2), 'O74') > 0.​

确实工作得很好,但是,按照编码,它一次只工作一个“DIAG”列。鉴于患者数量惊人(> 3,000,000)和每位患者的诊断数量(25),将其合并到一个循环中将是理想的。已经进行了多次尝试。

出于“测试”数据集的目的,变量“DIAG”已连续列出。在实际数据集中,每个“DIAG”由两个变量分隔。如果将这些变量连续列出的解决方案要简单得多,那当然可以做到。

我非常感谢任何关于 SPSS 中可能是一个非常基本的语法问题的输入/指导。

【问题讨论】:

    标签: string loops syntax macros spss


    【解决方案1】:

    所以你的循环不起作用的原因是每次运行“DIAG(X)”的比较时都会替换之前的比较,所以只有最后一个“存活”。 解决问题的方法有很多,这里是最简单的:

    compute O74=0.
    do repeat x = DIAG1 to DIAG3.
    if O74=0 O74 = any(x,"O74001", "O74019").
    end repeat.
    

    这样,如果 O74 在某个时刻变为 1,它不会在循环的下一次运行中再次回到 0。 您的其他语法也是如此:

    compute flag = 0.
    do repeat x = DIAG1 to DIAG25.
    if flag=0 flag = (char.index(UPPER(x), 'O74') > 0​ ).
    end repeat.
    

    至于 DIAG 变量的顺序 - 如果它们不连续,您只需分别命名它们 (do repeat x = DIAG1 DIAG2 DIAG3 DIAG4 ....DIAG25)。或者,您可以使用以下命令在宏中创建列表(您可以在我的答案here 中查看示例):

    spssinc select variables macroname="!alldiags" /properties pattern="DIAG*".
    

    运行后,您可以使用这样创建的宏:

    do repeat x = !alldiags.
    

    请注意,任何其他以“DIAG”开头的变量都将被捕获到列表中。如果您有任何问题,请查找 spssinc select variables 以尝试找到解决方法(或提出新问题!)。

    【讨论】:

    • 太棒了!语法效果很好!感谢您非常及时的回复
    猜你喜欢
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 2016-01-18
    • 1970-01-01
    相关资源
    最近更新 更多