【问题标题】:SPSS Loop: parse n variables for list of valuesSPSS Loop:解析n个变量以获取值列表
【发布时间】:2021-03-02 14:12:31
【问题描述】:

我想使用针列表遍历多个变量(即多个干草堆)。

数据:

PICK1 PICK2 PICK3 PICK4
Grape Raspberry Clementime Strawberry
Strawberry Lemon Blueberry Apple
Cantelope Mango Grape Pear
Apple Orange Kiwi Raspberry

有效的手动代码

Compute citrus=0
if char.index(PICK1,"orange")>0 citrus=1.
if char.index(PICK2,"orange")>0 citrus=1.
if char.index(PICK3,"orange")>0 citrus=1.
if char.index(PICK4,"orange")>0 citrus=1.
if char.index(PICK1,"lemon")>0 citrus=1.
if char.index(PICK2,"lemon")>0 citrus=1.
if char.index(PICK3,"lemon")>0 citrus=1.
if char.index(PICK4,"lemon")>0 citrus=1.
if char.index(PICK4,"clementine")>0 citrus=1.
if char.index(PICK4,"clementine")>0 citrus=1.
if char.index(PICK4,"clementine")>0 citrus=1.
if char.index(PICK4,"clementine")>0 citrus=1.

期望结果:如果在变量中找到值,则记录 1

Citrus
1
1
0
1

尝试的代码(不工作)

do repeat L = [orange, lemon, clementine]
 /PICK = PICK1 to PICK7000.
compute L = if char.index(PICK,L)>0 citrus=1.
end repeat.

我最初将 char.index 用于搜索具有相似基名的多个值。例如,搜索“berry”会希望找到“strawberry”、“blueberry”等。有没有办法将其合并到COMPUTE 函数中?

NUMERIC berry (f1.0).
DO REPEAT  PICK = PICK1 to PICK7000.
COMPUTE berry=any(PICK, char.index(PICK, "berry").
END REPEAT.
EXECUTE.

【问题讨论】:

    标签: loops spss


    【解决方案1】:

    do repeat 结构使用长度必须相等的数组进行操作。最重要的是,您不需要方括号,并且在引号之间引用字符串。另外,不确定compute 是否真的像那样工作,与if 转换混合使用。

    您要解析变量列表,检查 3 个字符串,如果满足条件则进行转换:

    NUMERIC citrus (f1.0).
    COMPUTE citrus=0.
    DO REPEAT  PICK = PICK1 to PICK7000.
    IF any(PICK, "orange", "lemon", "clementine") citrus=1.
    END REPEAT.
    EXECUTE.
    

    或者,更合成一点:

    NUMERIC citrus (f1.0).
    DO REPEAT  PICK = PICK1 to PICK7000.
    COMPUTE citrus=any(PICK, "orange", "lemon", "clementine").
    END REPEAT.
    EXECUTE.
    

    或者,如果您还想查看任何“浆果”:

    NUMERIC citrus (f1.0).
    NUMERIC berries (f1.0).
    DO REPEAT  PICK = PICK1 to PICK7000.
    COMPUTE citrus=any(PICK, "orange", "lemon", "clementine").
    COMPUTE berries = CHAR.INDEX(PICK, "berry")>0.
    END REPEAT.
    EXECUTE.
    

    【讨论】:

    • 谢谢!循环功能完美运行。我最初将 char.index 用于搜索具有相似基本名称的多个值。例如,搜索“berry”会希望找到“strawberry”、“blueberry”等。有没有办法将其合并到 COMPUTE 函数中?数字浆果(f1.0)。 DO REPEAT PICK = PICK1 到 PICK7000。计算 berry=any(PICK, char.index(PICK, "berry"). END REPEAT. EXECUTE.
    • 是的,但是请更改原始问题并将其添加为单独的问题;否则答案不会回答问题...
    • 已添加。再次感谢!
    • 您也可以接受答案作为正确答案 - 答案左侧的大绿色复选标记 ;)
    猜你喜欢
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 2012-11-21
    相关资源
    最近更新 更多