2015-03-02 2 views
1

Я хочу удалить несколько пробелов из строки.Функция сжатия в SAS

%let CDate = 25Mar2015; 

data _null_; 
call symput('TitleDate',cat(put("&CDate."d,monname9.),', ',year("&CDate."d))); 
run; 

%put &TitleDate; /* March, 2015 */ 
%put Title is &TitleDate; /* multiple blanks between 'is' and 'March' */ 

Я попытался compress: %put Title is %sysfunc(compress(&TitleDate)); Но он возвращается Title is March без года части.

ответ

2

очень близко, две модификации:

  1. ВЫЗОВ SYMPUTX вместо ВЫЗОВ SYMPUT
  2. WORDDATE20. формат вместо кошки/поместить комбинации

    call symputx('TitleDate',put("&CDate."d,worddate20.)); 
    

EDIT (для ответа на вопрос в комментариях): Функция компресс принимает 3 аргумента, первый является обязательным, а два последних являются вариантом.

функция компресс не работает, потому, что SAS видит это:

компресс (25 марта, 2015) Это недопустимый вызов функции компресса. Я думаю, что функция сжатия предполагает, что второй аргумент будет равен 2015 году, и я не знаю, что он делает с 25. Я бы на самом деле ожидал, что он создаст ошибку, но это не так.

Если вы хотите использовать функцию сжатия для передачи символьного значения, вам нужно будет процитировать ее с помощью функции% quote, но это избавит от всех пробелов, и я думаю, вы просто хотели избавиться от ведущие пространства.

%put Title is %sysfunc(compress(%quote(&TitleDate.))); 
+1

Спасибо, это сработало. Не могли бы вы объяснить, почему 'compress' возвращает усеченный результат? – Lovnlust

+0

Привет. Если вы примените только функцию сжатия к значению макрокоманды «Март 2015», то из-за «,» SAS попытается сжать строку «Март» к 2015 году, что приведет к марту. –