【问题标题】:How to select cases based on criteria of several variables in SPSS?如何根据SPSS中多个变量的标准选择案例?
【发布时间】:2016-12-28 10:31:27
【问题描述】:

在一个数据集中,有 10 个变量 V1、V2、...、V10。

如何选择其中任何变量的值大于或等于 10 的情况?

我试过了,但没用:

temporary.
select if any(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, ge 10).
list id.

这个和其他几个也不起作用:

select if ((v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) ge 10).

【问题讨论】:

    标签: spss


    【解决方案1】:

    这也可以:

    count cnt_ = v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 (10 thru highest).
    exe.
    select if cnt_>0.
    exe.
    

    cnt_variable 用于计算有多少变量的值为 10 或更大。然后选择命令选择你需要的。

    另外,不要忘记execute,以应用所有待处理的转换。否则什么都不会发生。

    【讨论】:

    • 会是count cnt_ = v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 (10 thru highest).吗?
    • 不错!我总是忘记COUNT 命令。请记住,您可以像V1 to V10 一样按连续顺序引用变量,第一个EXE 也不是必需的。当它可以在第二个数据传递时同时完成时,它会引入额外的数据传递。
    • @JigneshSutar 你在两个账户上都是正确的:v1 to v10 工作如果变量是连续的;关于exe - 我见过很多人们完全忘记它的例子(即使在这个问题的一些答案中)。我养成了在进行另一组转换时添加它们的习惯(例如 - 从计数到选择);但你是正确的,第一个不是绝对必要的。
    • @horace_vr +1 for the COUNT from me too...关于exe,我只在需要立即运行转换时使用它(查看结果或进一步分析取决于首先运行转换,例如在使用 LAG 函数之后),否则我会尽量避免它,因为它不是分析的必要部分,并且在大文件上运行语法时可能会浪费大量时间。
    【解决方案2】:

    您可以在此处使用 VECTOR/LOOP 方法并指定在第一个变量满足给定条件时立即退出循环,在您的情况下变量大于值 10,这样就不会不必要地继续循环剩余变量:

    *****************************************.
    * set up dummy data.
    set seed = 10.
    input program.
    loop #i = 1 to 500.
    compute case = #i.
    end case.
    end loop.
    end file.
    end input program.
    dataset name sim.
    execute.
    vector v(10, F1.0).
    do repeat v = v1 to v10.
    compute v = TRUNC(RV.UNIFORM(1,12)).
    end repeat.
    execute.
    *****************************************.
    
    vector v=v1 to v10.
    loop i=1 to 10.
      if (v(i) > 10) Keep=1.
    end loop if v(i) > 10.
    select if Keep.
    

    【讨论】:

      【解决方案3】:

      你必须为它循环:

      do repeat vr=v1 to v10.
         if vr ge 10 KeepMe=1.
      end repeat.
      select if KeepMe=1.
      

      【讨论】:

      • 感谢您和@Jignesh Sutar 的解决方案。然而,我想知道它是否也可以类似如下进行。例如,如果条件是选择值等于10的case,那么可以是:if any(10, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) keep = 1.或者如果选择条件是范围而不是单个值,是不是不能这样写?
      • any只能与单个值一起使用(例如 - 10,如上例所示); range,另一方面,只能使用一个变量:select if range(var1,10,999)
      • 当然,如果你绝对想避免循环,你可以select if v1>=10 or v2>=10 0r ....,但正如 horace_vr 所说 - 没有命令/函数可以一口气完成所有这些比较。
      猜你喜欢
      • 2021-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多