* Преобразования имён. * Запустите синтаксис, чтобы увидеть, что он делает. * Синтаксис не будет работать правильно, если в фамилии будет стоять пробел. * Размещено в SPSSX-L 9.4.2002. Автор: Ray. * http://www.spsstools.net. DATA LIST FIXED /names 1-50(a). BEGIN DATA A B & C D SMITH A B SMITH & C D BLOGGS A SMITH & C BLOGGS A B SMITH & C BLOGGS A B SMITH & C D BLOGGS & E F JONES END DATA. LIST. STRING str1 TO str3(A20) /lastnam1 to lastnam3(A20). COMPUTE str1=SUBSTR(names,1,INDEX(names,'&')-1). DO IF INDEX(names,'&')=RINDEX(names,'&'). COMPUTE str2=SUBSTR(names,RINDEX(names,'&')+1). ELSE. COMPUTE str2=SUBSTR(names,INDEX(names,'&')+1,RINDEX(names,'&')-INDEX(names,'&')-1). COMPUTE str3=SUBSTR(names,RINDEX(names,'&')+1). END IF. * Поиск фамилий. DO REPEAT varstr=str1 str2 str3 /varlast=lastnam1 lastnam2 lastnam3. IF LEN(RTRIM(varstr))>3 varlast=SUBSTR(varstr,RINDEX(RTRIM(varstr),' ')). END REPEAT PRINT. EXECUTE. * Начинаем создание результирующей строки. STRING result(A50). DO IF LEN(RTRIM(lastnam1))=0. COMPUTE result=CONCAT( RTRIM(lastnam2),' ',RTRIM(str1),' AND', SUBSTR(str2,1,RINDEX(RTRIM(str2),' ')) ). ELSE. COMPUTE result=CONCAT( RTRIM(lastnam1),' ', SUBSTR(str1,1,RINDEX(RTRIM(str1),' ')),' AND', RTRIM(lastnam2),' ', SUBSTR(str2,1,RINDEX(RTRIM(str2),' ')) ). END IF. EXECUTE. DO IF LEN(RTRIM(lastnam3))>0. COMPUTE result=CONCAT( RTRIM(result),' AND',RTRIM(lastnam3), SUBSTR(str3,1,RINDEX(RTRIM(str3),' ')) ). END IF. EXECUTE.