Как я могу перебрать переменные в SPSS?Я хочу избежать дублирования кода - PullRequest
5 голосов
/ 21 мая 2010

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

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

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

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

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

Ответы [ 7 ]

7 голосов
/ 16 февраля 2011

Существует два простых решения для циклического перебора переменных (проще по сравнению с использованием 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  /.
5 голосов
/ 26 февраля 2011

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

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

FREQUENCIES
    VARIABLES= varlist [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 17.0 Справочник по синтаксису команды доступно в http://support.spss.com/ProductsExt/SPSS/Documentation/SPSSforWindows/index.htm

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

1 голос
/ 24 января 2011

Да, SPSS может сделать это.Похоже, что парни из UCLA используют 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.

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

1 голос
/ 04 сентября 2010

Более эффективно делать все эти частоты за один проход данных, например, 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 становится намного мощнее и проще, когда вы освоите его.

0 голосов
/ 23 июля 2016

Как сделать это 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

спасибо.

0 голосов
/ 11 июня 2010

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

http://spsstools.net/Macros.htm

Также может пригодиться книга по управлению данными SPSS.

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

НТН

0 голосов
/ 22 мая 2010

Вот страница из Службы академических технологий Калифорнийского университета в Лос-Анджелесе, где описывается циклический просмотр списков переменных . Цитата,

"Потому что мы проходим через чем одна переменная, нам нужно будет использовать Python. "

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

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

...