* Этот макрос будет полезен, если вам требуется изменить формат переменных... * со строкового на строковый (например, изменить длину) (ss), * с числового на строковый (ns) или * со строкового на числовой (sn) * и при этом сохранить исходное имя и метку переменной. * Автор: rlevesque@videotron.ca, 23.05.2001. */////////////////////. DEFINE !convert (vname=!TOKENS(1) /nformat=!TOKENS(1) /type=!TOKENS(1)) /* здесь vname= имя переменной, формат которой изменяем */ /* nformat = новый формат */ /* type= тип преобразования: ss (со строки на строку), ns или sn, где n=числовой, s=строковый */ !IF (!type='ss') !THEN STRING temp1234(!nformat). COMPUTE temp1234=!vname. !IFEND !IF (!type='ns') !THEN STRING temp1234(!nformat). COMPUTE temp1234=LTRIM(STRING(!vname,F18.0)). !IFEND !IF (!type='sn') !THEN COMPUTE temp1234=NUMBER(!vname,F18.0). FORMAT temp1234(!nformat). !IFEND * Следующая команда сохраняет метку переменной. - А.Б. * В случае преобразования типа команда выдаёт предупреждение о невозможности скопировать все * свойства переменной одного типа на переменную другого типа, но метку приписывает без проблем. APPLY DICTIONARY FROM=* /SOURCE VAR=!vname /TARGET VAR=temp1234. MATCH FILES FILE=* /DROP=!vname. RENAME VARIABLE (temp1234=!vname). EXECUTE. !ENDDEFINE. */////////////////////. * ПРИМЕР: как использовать макрос. * пример данных. DATA LIST LIST /var1(A8), var2(A8), var3(F8.0). BEGIN DATA abcdefg 254 235 adadad 128 265 END DATA. LIST. VAR LABEL var1 'Переменная 1' /var2 'Переменная 2' /var3 'Переменная 3'. !convert vname=var1 nformat=A5 type=ss. *Этот вызов макроса укоротит строковую переменную var1 с 8 до 5 символов. !convert vname=var2 nformat=F8.2 type=sn. *Этот вызов конвертирует строковую переменную var2 в числовой формат F8.2. * (Разумеется, если var2 содержит значение, которое не интерпретируется как число, результат будет пропуском). !convert vname=var3 nformat=A8 type=ns. *Этот вызов конвертирует числовую переменную var3 в строковый формат A8.