2016-10-19 2 views
2

Приносим извинения за запутанное название. По существу, требуемая функциональность в SPSS работает со следующим файлом данных:Создание новой переменной в SPSS со значением, равным другой переменной

Monday  Tuesday  Wednesday  Day of Interest Temperature on Day of interest 
72   78   80   2      

Здесь мы имеем три переменные и затем температуру для каждого из этих дней. Цель состоит в том, чтобы создать новую переменную, в примере это Температура в День интереса, которая имеет то же значение, что и в тот день, когда она соответствует (например, второй день недели - понедельник, поэтому мы хотим температуру в понедельник в новый столбец переменных). Таким образом, результат синтаксиса должен сделать файл данных следующим образом:

Monday  Tuesday  Wednesday  Day of Interest Temperature on Day of interest 
72   78   80   2     72 

Мои мысли, что я могу использовать оператор If, но я не уверен, как именно синтаксис будет в SPSS. Вот что я написал:

IF (Day of Interest = 2) Temperature on Day of Interest = $Monday. 
IF (Day of Interest = 3) Temperature on Day of Interest = $Tuesday. 

ли кто-нибудь случиться, чтобы знать, как правильно ссылаться на значения в различных переменных, таким образом? Надеюсь, это ясно, я смогу ответить на любые вопросы!

ответ

1

Создание некоторые поддельные данные для демонстрации на:

data list list/Sunday Monday Tuesday Wednesday Thursday Friday Saturday Day_of_Interest . 
begin data 
41 42 43 44 45 46 47 2 
51 52 53 54 55 56 57 6 
61 62 63 64 65 66 67 4 
71 72 73 74 75 76 77 7 
81 82 83 84 85 86 87 1 
end data. 

Теперь можно, конечно, работать с отдельной IF заявления, как это:

IF (Day_of_Interest = 2) Temperature_on_Day_of_interest = Monday. 
IF (Day_of_Interest = 3) Temperature_on_Day_of_interest = Tuesday. 
IF (Day_of_Interest = 4) Temperature_on_Day_of_interest = Wednesday. 
EXECUTE. 

Но вместо того, чтобы создать семь отдельных заявлений для семи дней, вы можете использовать петлю таким образом:

do repeat Dname=Sunday Monday Tuesday Wednesday Thursday Friday Saturday/Dval=1 2 3 4 5 6 7. 
IF (Day_of_Interest = Dval) Temperature_on_Day_of_interest = Dname. 
end repeat. 
EXECUTE. 
+0

Благодаря @ eli-k, это точно моя предназначенная функциональность. Большое спасибо за вашу помощь. – George

1

Решение (и), предоставленные eli-k будет более чем достаточным, если у вас есть большой набор данных, тогда вы оцениваете состояние 7 x числовых случаев в вашем наборе данных и не менее, что-то, о чем следует помнить.

Если, однако, вы используете DO IF/END IF, тогда вы можете добиться того же результата, только один раз пропустив все случаи. На больших наборах данных это может иметь большие последствия для времени обработки.

do if Day_of_Interest=1. 
    compute Temperature=Sunday. 
else if Day_of_Interest=2. 
    compute Temperature=Monday. 
else if Day_of_Interest=3. 
    compute Temperature=Tuesday. 
else if Day_of_Interest=4. 
    compute Temperature=Wednesday. 
else if Day_of_Interest=5. 
    compute Temperature=Thursday. 
else if Day_of_Interest=6. 
    compute Temperature=Friday. 
else if Day_of_Interest=7. 
    compute Temperature=Saturday. 
end if. 

Вы, возможно, придется написать несколько строк кода, как указано выше, но вы должны сбалансировать писать компактный/экономный код в зависимости от времени обработки. Вы можете сделать это еще дальше, где вы перечисляете в коде каждый оператор DO IF с уменьшающейся частотой Day_of_Interest. Это в принципе некоторые из методов, используемых при обработке больших наборов данных.

+0

Спасибо, это то, что хорошо иметь в виду. Набор данных имеет около 10 миллионов случаев, поэтому особенно хорошо иметь в виду. К сожалению, я должен использовать утверждения IF, поскольку мои коллеги не имеют опыта с циклами, и им, возможно, придется выполнять подобные операции. Тем не менее, я действительно ценю ваше время и благодарю вас за ваш задумчивый и спот-ответ. – George

+0

Нет ничего сложнее в использовании 'DO IF' против' IF'. –

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