2014-10-21 3 views
1

В Python я могу легко извлечь пары из списков:Python-подобная функция zip в Stata?

>>>list1 = [1, 2, 3] 
>>>list2 = [4, 5, 6] 
>>>zip(list1, list2) 
[(1, 4), (2, 5), (3, 6)] 

Как я могу достичь того же результата в Stata? Если у меня есть два локальных файла, оба из которых содержат одинаковое количество элементов, как можно создать Python-подобный «zip»? (Погуглить это кошмар из-за нулевой завышены Пуассона - то есть, ZIP - модель ...)

ответ

1

Я не думаю, что есть выделенная команда/функция для этого, но рассматривать параллельные списки:

local agrp "cat dog cow pig" 

local bgrp "meow woof moo oinkoink" 

local n : word count `agrp' 

forvalues i = 1/`n' { 
     local a : word `i' of `agrp' 
     local b : word `i' of `bgrp' 
     di "`a' says `b'" 
} 

См. http://www.stata.com/support/faqs/programming/looping-over-parallel-lists/.

1

Вы можете комбинировать два вектора как матрицу в Stata и Mata (где векторы могут содержать строки и многое другое). Вот Stata:

. mat list1 = [1, 2, 3]' 
. mat list2 = [4, 5, 6]' 
. mat list = list1, list2 
. mat li list 

    list[3,2] 
    c1 c1 
r1 1 4 
r2 2 5 
r3 3 6 

Что вы хотели бы сделать с такой структурой в Stata? Как указывает ответ @Roberto Ferrer, вы часто бы просто проходили параллельно по отдельным спискам.

+0

Я пытался перебрать пары строк. – Parzival

+1

Может быть проще в Мата, или просто 'foreach' в Stata. Моя статья на http://www.stata-journal.com/sjpdf.html?articlenum=pr0009 охватывает некоторые возможности. См. Раздел 3. –

+0

Спасибо, я посмотрю. – Parzival