У меня проблема, которую я не могу решить с помощью SPSS (v20).
Есть главный список из 10.000 строк. Думайте об этом как о таком массиве: ['Sao Paolo S.P.', 'IDE MUNICH', '1_New YORK', 'BabylonX', ...]
У меня есть набор данных с переменной, который содержит строки аналогичный для вышеупомянутого массива, но это не те же самые.
Вот так:
Что мне нужно сделать, это проверить, является ли OldString (из набора данных) частью какой-либо из строк в главном массиве.
Очевидно, что 123 Вавилон (из набора данных) будет связан с ВавилонX (из массива).
Очевидно, что 1234 Sao Paolo S (из набора данных) будет связан с Сан-Паоло С.П. (из массива).
и так далее...
Если совпадение обнаружено, то строку из (главного) массива следует заполнить новой переменной NewString.
Есть ли способ добиться этого? Используя VBA, Perl, PHP, это очень просто, но, используя SPSS, я понятия не имел, как объединить эти шаги.
наверное правда. так что "часть" может быть достаточно. однако мне все еще нужно выяснить сложную часть помещения char.index в цикл, который фактически заполняет stringb ... какие-либо предложения?



Следующий синтаксис представляет собой возможный способ выполнения цикла сравнения совпадений с использованием 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 соответствует более чем одной строке в списке, текущий синтаксис будет фиксировать только последнее совпадение.
re «подобен или является частью»,
char.index(stringa, stringb)будет «частью», но как вы определяете «подобное»? Если у вас есть рабочий пример на VBA, Perl или PHP, вы можете добавить его в свой пост, чтобы мы могли попробовать применить его к SPSS.