* (Вопрос): Имеются переменные, чьи имена оканчиваются на "_1". * Требуется скопировать переменные так, чтобы имена новых оканчивались на "_2". * (Ответ): Это обобщение, данное rlevesque@videotron.ca к исходному решению, предложенному Rolf Kjoeller */. ********************************************************* ***** Исходное решение частной задачи ***** ********************************************************* data list list /v_1 var_1 dhjl_1 dfgrjt_1 . begin data 1 2 3 4 8 7 6 5 end data . define !copy(!positional !cmdend) . !do !var !in (!1) . /* rename variables /* (!var=!concat(!substr(!var,1,!index(!var,"_1")),"2") ). compute !concat(!substr(!var,1,!index(!var,"_1")),"2") = !var . !doend . execute . !enddefine . !copy v_1 var_1 dhjl_1 dfgrjt_1 . ********************************************************* *** Обобщение. Автор: rlevesque@videotron.ca *** *** http://www.spsstools.net *** ********************************************************* DATA LIST LIST /v_1 var_1 dhjl_1 dfgrjt_1. BEGIN DATA 1 2 3 4 8 7 6 5 END DATA.. SET MPRINT=no /PRINTBACK=listing. *///////////////////////////////. DEFINE !varname (func=!TOKENS(1) /old=!ENCLOSE('(',')') /new=!ENCLOSE('(',')') /vlist=!CMDEND) !DO !var !IN (!vlist) /* вычисляем длину старой приставки плюс 1 */ !LET !lenold=!LENGTH(!CONCAT(!BLANK(!LENGTH(!old)),!BLANK(1))) /* n - число символов в имени, которые остаются без изменения */ !LET !n=!LENGTH(!SUBSTR(!BLANK(!LENGTH(!var)),!lenold)) /* Копируем или переименовываем переменные */ !IF (!UPCASE(!func)=RENAME) !THEN RENAME VARIABLES (!var=!CONCAT(!SUBSTR(!var,1,!n),!new)). !ELSE COMPUTE !CONCAT(!SUBSTR(!var,1,!n),!new) = !var. !IFEND !DOEND EXECUTE. !ENDDEFINE. *///////////////////////////////. SET MPRINT=yes. * пример переименования исходных переменных (заменой "_1" на "_2"). !varname func=rename old=(_1) new=(_2) vlist=v_1 var_1 dhjl_1 dfgrjt_1. LIST. * пример переименования исходных переменных (заменой "_2" на "x"). !varname func=rename old=(_2) new=(x) vlist=v_2 var_2 dhjl_2 dfgrjt_2. LIST. * пример копирования исходных переменных (с заменой "x" на "yz"). !varname func=copy old=(x) new=(yz) vlist=vx varx dhjlx dfgrjtx. LIST.