2016-08-22 3 views
5

В наборе данных имеется 10 переменных V1, V2, ..., V10.Как выбрать случаи на основе критериев нескольких переменных в SPSS?

Как я могу выбрать случаи, когда значение любой из этих переменных больше или равно, скажем, 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). 

ответ

1

Это также будет работать:

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

Переменная cnt_ используется для подсчета как многие переменные имеют значение 10 или больше. Затем команда выбора выбирает то, что вам нужно.

Кроме того, не забудьте о execute, чтобы применить все ожидающие преобразования. Иначе ничего не произойдет.

+0

Будет ли это 'count cnt_ = v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 (10 thru maximum) .'? – NonSleeper

+0

Ницца! Я всегда забываю о команде «COUNT». Помните, что вы можете ссылаться на переменные в последовательном порядке просто как «V1-V10», также не нужен первый «EXE». Он вводит дополнительный пропуск данных, когда он может быть выполнен одновременно во втором проходе данных. –

+0

@JigneshSutar вы правы на обеих учетных записях: 'v1 to v10' работает IF переменные последовательны; о «exe» - я видел много случаев, когда люди полностью забыли об этом (даже в некоторых ответах на этот вопрос). Я привык добавлять их всякий раз, когда я перехожу к другому набору преобразований (например, от подсчета до выбора); но вы правы в том, что первый не является абсолютно необходимым. –

3

Вы должны петли для него:

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

Спасибо за ваши решения @Jignesh Sutar. Я, однако, задаюсь вопросом, можно ли это сделать аналогично следующему. Например, если критерием является выбор случая со значениями, равными 10, то он может быть: 'если есть (10, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) keep = 1. 'Или он не может быть написан в этом стиле, если критерии выбора - это диапазон, а не одно значение? – NonSleeper

+0

'any' может использоваться только с одним значением (например, - 10, как в вашем примере выше); 'range', с другой стороны, в качестве параметра используется только одна переменная:' select if range (var1,10,999) ' –

+0

Конечно, если вы абсолютно хотите избежать цикла, вы можете« выбрать, если v1> = 10 или v2> = 10 0r .... ', но, как говорит horace_vr, нет никакой команды/функции, которая сделает все эти сравнения одним махом. –

4

Здесь вы можете использовать подход 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. 
+0

«end loop IF» - действительно приятное прикосновение для повышения эффективности ... –

Смежные вопросы