Как я могу перебирать переменные в SPSS? Я хочу избежать дублирования кода

Есть ли «родной» способ SPSS для перебора некоторых имен переменных? Все, что я хочу сделать, это взять список переменных (которые я определяю) и запустить для них ту же процедуру:

псевдокод - не очень хороший пример, но суть понятна...

for i in varlist['a','b','c']
do
  FREQUENCIES VARIABLES=varlist[i] / ORDER=ANALYSIS.
end

Я заметил, что люди, кажется, просто используют плагины R или Python SPSS для достижения этой базовой функциональности массива, но я не знаю, как скоро я смогу настроить их (если вообще когда-либо) на моей установке SPSS.

У SPSS должен быть какой-то собственный способ сделать это... верно?


person chucknelson    schedule 21.05.2010    source источник


Ответы (7)


Есть два простых решения для зацикливания переменных (более простое по сравнению с использованием Python в SPSS).

1) DO REPEAT-END REPEAT

Недостатком является то, что вы можете использовать DO REPEAT-END REPEAT в основном только для преобразования данных - например, COMPUTE, RECODE и т. д. Частоты не допускаются. Например:

DO REPEAT R=REGION1 TO REGION5.
COMPUTE R=0.
END REPEAT.

2) DEFINE-!ENDDEFINE (макрос)

Вы можете делать частоты в цикле переменных, используя команду макроса. Например:

DEFINE macdef (!POS !CHAREND('/'))
!DO !i !IN (!1)
frequencies variables = !i.
!DOEND
!ENDDEFINE.

macdef VAR1 VAR2 VAR3  /.
person djhurio    schedule 16.02.2011

Если я правильно понимаю вопрос, возможно, нет необходимости использовать циклическую конструкцию. Команды SPSS с подкомандой VARIABLES, такой как FREQUENCIES, позволяют указать несколько переменных.

Основной синтаксис для ЧАСТОТ:

FREQUENCIES
    VARIABLES= varlist [varlist...] 

где [список_переменных] — это одно имя переменной, несколько имен переменных, разделенных пробелами, диапазон последовательных переменных, указанных с ключевым словом TO, ключевым словом ALL или комбинацией предыдущих параметров.

Например:

FREQUENCIES VARIABLES=VARA

FREQUENCIES VARIABLES=VARA VARB VARC

FREQUENCIES VARIABLES=VARA TO VARC     

FREQ VAR=ALL

FREQ VAR=VARA TO VARC VARM VARX TO VARZ

См. Справочник по синтаксису команд SPSS Statistics 17.0, доступный по адресу http://support.spss.com/ProductsExt/SPSS/Documentation/SPSSforWindows/index.htm

Обратите внимание, что прошли годы с тех пор, как я фактически использовал SPSS.

person Mike H    schedule 25.02.2011

Более эффективно выполнять все эти частоты за один проход данных, например, FREQUENCIES a to c., но Python позволяет выполнять циклы и множество других трюков с потоком управления.

begin program.
import spss
for v in ['a','b','c']:
  spss.Submit("FREQUENCIES " + v)
end program.

Для использования Python требуется установить (бесплатный) подключаемый модуль Python, доступный в SPSS Developer Central, www.spss.com/devcentral.

Вы можете, конечно, использовать макросы для таких вещей, но Python становится намного мощнее и проще, когда вы его освоите.

person Jon Peck    schedule 03.09.2010

Да, SPSS может это сделать. Похоже, ребята из Калифорнийского университета в Лос-Анджелесе используют python, потому что они знают, как это делать на python, а не в SPSS. :)

Назовем ваши переменные VARA, VARB, VARC. Они должны быть числовыми (поскольку вы делаете частоты) и они должны быть последовательными в вашем файле данных spss. Затем вы создаете вектор, который фактически говорит: «Вот ряд переменных, которые я хочу пройти».

VECTOR VectorVar = VarA TO VarC.
LOOP #cnt = 1 to 3 by 1.
    FREQUENCIES VARIABLES=VectorVar(#cnt) / ORDER=ANALYSIS
ENDLOOP.
EXECUTE.

(Вышеупомянутое не проверялось. Возможно, где-то отсутствует точка и т. д.)

person Brian Teasley    schedule 24.01.2011
comment
Это определенно не работает - не только из-за пропущенного периода. LOOP и DO REPEAT влияют только на команды преобразования, они не влияют на команды вывода, такие как FREQUENCIES. - person Andy W; 05.01.2016

Вот страница из Academic Technology Services Калифорнийского университета в Лос-Анджелесе, описывающая перебор списков переменных< /а>. Цитировать,

«Поскольку мы перебираем более одной переменной, нам нужно будет использовать Python».

По моему опыту, UCLA ATS, вероятно, является сайтом с лучшим охватом всех основных статистические вычислительные системы. Если они говорят, что вам нужен Python... вам, вероятно, нужен Python.

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

person Matt Parker    schedule 21.05.2010
comment
Что ж, у меня тоже есть SAS, но SPSS, похоже, лучше подходит для той статистики, которую я делал в основном по принципу «укажи и щелкни». Спасибо за совет :) Может быть, я просто разберусь с кодом SAS для этой задачи... - person chucknelson; 24.05.2010

Я не очень часто использовал макросы SPSS, но, может быть, они помогут вам достичь того, что вам нужно? Проверьте этот сайт для некоторых примеров:

http://spsstools.net/Macros.htm

Также может оказаться полезной книга SPSS Data Management.

Наконец, если мне не изменяет память, я думаю, что проблема может быть даже основным примером того, как использовать Python внутри синтаксиса SPSS. Я использовал Python и SPSS всего несколько раз, но очень удобно иметь доступ к этому языку, если это необходимо.

ХТН

person Btibert3    schedule 11.06.2010

Как можно сделать этот stata sintxis для spss.

foreach var of varlist  pob_multi pob_multimod pob_multiex vul_car vul_ing nopob_nov espacio carencias carencias_3 ic_rezedu ic_asalud ic_ss  ic_cv  ic_sbv ic_ali  pobex pob  {
    tabstat `var' [w=factor] if pob_multi!=., stats(mean) save
    matrix define `var'_pp =(r(StatTotal))
    matrix rownames `var'_pp = `var'_pp
}

matrix tabla1 = (pob_multi_pp \ pob_multimod_pp \ pob_multiex_pp \ vul_car_pp \ vul_ing_pp \ nopob_nov_pp \ espacio_pp \ carencias_pp \ carencias_3_pp \ espacio_pp \ ic_rezedu_pp\ ic_asalud_pp \ ic_ss_pp \ ic_cv_pp \ ic_sbv_pp\ ic_ali_pp \ espacio_pp \ pobex_pp \ pob_pp   )
matrix list tabla1

Благодарю.

person Gerry    schedule 23.07.2016