Комплексное соответствие строки SPSS (v20)

У меня проблема, которую я не могу решить с помощью SPSS (v20).

Есть главный список из 10.000 строк. Думайте об этом как о таком массиве: ['Sao Paolo S.P.', 'IDE MUNICH', '1_New YORK', 'BabylonX', ...]

У меня есть набор данных с переменной, который содержит строки аналогичный для вышеупомянутого массива, но это не те же самые.

Вот так:

Комплексное соответствие строки SPSS (v20)

Что мне нужно сделать, это проверить, является ли OldString (из набора данных) частью какой-либо из строк в главном массиве.

Очевидно, что 123 Вавилон (из набора данных) будет связан с ВавилонX (из массива).

Очевидно, что 1234 Sao Paolo S (из набора данных) будет связан с Сан-Паоло С.П. (из массива).

и так далее...

Если совпадение обнаружено, то строку из (главного) массива следует заполнить новой переменной NewString.

Есть ли способ добиться этого? Используя VBA, Perl, PHP, это очень просто, но, используя SPSS, я понятия не имел, как объединить эти шаги.

re «подобен или является частью», char.index(stringa, stringb) будет «частью», но как вы определяете «подобное»? Если у вас есть рабочий пример на VBA, Perl или PHP, вы можете добавить его в свой пост, чтобы мы могли попробовать применить его к SPSS.

eli-k 05.09.2018 19:53

наверное правда. так что "часть" может быть достаточно. однако мне все еще нужно выяснить сложную часть помещения char.index в цикл, который фактически заполняет stringb ... какие-либо предложения?

sangrila B 05.09.2018 21:59
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
2
358
1

Ответы 1

Следующий синтаксис представляет собой возможный способ выполнения цикла сравнения совпадений с использованием char.index.

*First I'm turning your master list into a dataset - 
this can be done differently depending how the data is 
stored right now. In this example I just copy-pasted 
from your post into the syntax.

data list free/masterstring (a20).
begin data 
'Sao Paolo S.P.', 'IDE MUNICH', '1_New YORK', 'BabylonX'
end data.

*now I create a new syntax with a comparison command for each string in the list.

cd "c:\your path".
string cmd (a100).
compute cmd=concat("if char.index('",lower(rtrim(masterstring)),"', 
    lower(rtrim(mystring)))>0 matchedstr='",rtrim(masterstring),"'.").
write out = "check strings.sps"/cmd.

* the syntax is ready, at this point you will go back to your original dataset. 
For the example I'm creating a small example dataset.

data list free/mystring (a20).
begin data 
"123 Babylon" "babylon" "Sao Paolo" "1234 Sao Paolo S" 
end data.

*now we can run the syntax created earlier on the present dataset.
string matchedstr (a50).
insert file = "check strings.sps".
exe.

В результате вы должны увидеть, что «babylon» был распознан как часть «BabylonX» (команда выравнивает верхний и нижний регистры), и поэтому «BabylonX» появляется в matchedstring. То же самое для "Сан-Паулу" и "Сан-Паулу С.П.".

Примечание: если mystring соответствует более чем одной строке в списке, текущий синтаксис будет фиксировать только последнее совпадение.

Другие вопросы по теме