Всем привет!
Пару лет назад была статья о работе с макропеременными, о том как сохранять значения без хвоста пробелов. Тогда речь шла о записи значений через 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;
Более подробно в источнике:
Использованы материалы статьи:
Всем спасибо и удачи в настройках решений SAS!