2012-05-30 6 views
2

Мне нужно создать цикл синтаксиса, который запускает серию преобразованийСоздание функции цикла SPSS

Это упрощенный пример того, что мне нужно сделать

Я хотел бы создать пять фруктов переменных

  • apple_variable
  • banana_variable
  • mango_variable
  • papaya_variable
  • orange_variable

в V1

  • яблоко = 1
  • банан = 2
  • манго = 3
  • папайи = 4
  • оранжевый = 5

    Первый контур

    IF (V1 = {number}) {fruit} _variable = VX.

    IF (V2 = {number}) {fruit} _variable = VY.

    IF (V3 = {number}) {fruit} _variable = VZ.

    Выполнить цикл для следующих фруктов

Так что я хотел бы это Scripte, чтобы проверить, если V1, V2 или V3 содержит количество фруктов. Если один из них (только один), новый {fruit} _variable должен получить значение от VX, VY или VZ.

Возможно ли это? Сценарий должен создать более 200 переменных, поэтому потребуется немного времени, чтобы сделать вручную

ответ

1

Первый цикл можно поместить в команду DO REPEAT. По сути вы определяете свои два списка переменных, и вы можете циклически перебирать множество операторов if.

DO REPEAT V# = V1 V2 V3 
/VA = VX VY VZ. 
if V# = 1 apple_variable = VA. 
END REPEAT. 

Теперь 1 и apple_variable жестко заданы в приведенном выше примере, но мы можем свернуть это вверх в простой макрос заявление принимать произвольные параметры.

DEFINE !fruit (!POSITIONAL = !TOKENS(1) 
      /!POSITIONAL = !TOKENS(1)). 

DO REPEAT V# = V1 V2 V3 
/VA = VX VY VZ. 
if V# = !1 !2 = VA. 
END REPEAT. 

!ENDDEFINE. 

!fruit 1 apple_variable. 

Теперь это будет немного утомительно для более чем 200 переменных, но должно значительно упростить задачу. После того, как я дошел до этого, я обычно просто редактирую текст в своем списке, чтобы вызвать макрос 200 раз, что в этом случае все, что потребуется, это вставить !fruit перед номером и результирующим именем переменной. Это хорошо работает, особенно если список статичен.

Другие подходы, использующие встроенные средства SPSS (в основном, связанные с определенным MACRO) ИМО, как правило, уродливы, могут значительно усложнить код и часто не стоить времени (хотя, безусловно, выполнимо).Хотя это несколько смягчено, если вы готовы принять решение, использующее команды python.

1

DO REPEAT - хорошее решение здесь, но мне интересно, какова конечная цель. Это пахнет проблемой, которая может быть решена путем использования множественных средств ответа в статистике без необходимости проходить эти преобразования. Функция множественного ответа доступна в старой процедуре многократного ответа и в более новых объектах CTABLES и Chart Builder.

НТН, Джон Пек

0

комбинация операторов цикла: для, в то время как, в то время как делать с вложенными if..else и переключатель случае будет делать трюк. просто убедитесь, что у вас есть начальное значение и конечное значение для контура идти

скажем:

for (initial; final; increment) 
{ 
if (x == value) { 
    statements; 
}else{ 
    ... 
}