Обрезаем хвосты с пробелами в макропеременных через PROC SQL

Всем привет!

Пару лет назад была статья о работе с макропеременными, о том как сохранять значения без хвоста пробелов. Тогда речь шла о записи значений через DATA STEP.

В этой статье я поделюсь, как это можно сделать через PROC SQL.

Макропеременные являются отличным способом для хранения расчетных значений. Они не ограничиваются только Data Step — вы также можете использовать макропеременные практически всюду в коде.

По умолчанию макропеременная будет дополнена пробелами по ширине формата при сохранении значений в макропеременную через PROC SQL.

Вот небольшой пример:

proc sql noprint;

select avg(weight) format=comma12.1 into :avg from sashelp.class;

quit;

%put Average Weight is &avg;

Обратите внимание на то, как значение имеет лишние пробелы слева:

Average Weight is        100.0

Получившуюся макропеременную позже можно обрезать через код:

%let avg = %TRIM(&avg);

Но в этой макрофункции есть один неприятный момент, когда включены опции mprint mlogic и symbolgen. Лог работы программы непростительно засоряется, генерируя дополнительные строки на каждый удаленный пробел. Речь идёт о том, что логи могут формироваться в размере гигабайтов текстового файла.

Другой способов — обрезать пробелы через использование «separated by», тем самым разделить значения пробелами. Обычно это делается, когда вы выводите несколько значений в макропеременную, но это также и хитроумный способ обрезки пробелов.

proc sql noprint;

select avg(weight) format=comma12.1 into :avg separated by ‘ ‘ from sashelp.class;

quit;

А в SAS 9.3, нам добавили еще более элегантное решение – опция ‘TRIMMED’!

proc sql noprint;

select avg(weight) format=comma12.1 into :avg TRIMMED from sashelp.class;

quit;

Более подробно в источнике:

http://support.sas.com/documentation/cdl/en/sqlproc/63043/HTML/default/viewer.htm#n1tupenuhmu1j0n19d3curl9igt4.htm

Использованы материалы статьи:

http://blogs.sas.com/content/sastraining/2013/01/17/a-neat-new-trick-to-trim-your-macro-variables-in-9-3/

Всем спасибо и удачи в настройках решений SAS!

Добавить комментарий

Войти с помощью: 

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.