2016-11-03 4 views
0

я хочу получить доступ к обугленным переменному в том, где положении, как показано ниже ->символ переменного в пункте не может получить доступ к

%macro obs(indsn=, outdsn=, clause=, col=, optr=, subset_val=); 

data &outdsn; 
    set &indsn; 
    &clause &col &optr &subset_val; 
run; 

proc print data= &outdsn;run; 

%mend obs; 

%obs(indsn=infos, outdsn=ch,clause=where,col=name,optr=?, subset_val=Namo); 

пытается включить «в содержит как» оператор в выражении WHERE, но ее не работает дает синтаксис ошибка ... но отсутствующие операторы eq ne le gt работают ... как я могу разрешить эту помощь.

+0

добро пожаловать в переполнение стека! На ваш вопрос было бы легче ответить, если бы вы могли опубликовать пример (из журнала) точной синтаксической ошибки, которую вы получаете. –

ответ

0

Обязательно пройти (цитируемые) литералы, где требуется строки, например, следующим образом:

%obs(indsn=infos, outdsn=ch,clause=where,col=name,optr=?, subset_val='Namo'); 
+0

ваш код довольно общий. Я не думаю, что вы действительно можете поставить кавычки в datastep, так как в некоторых случаях вам могут не потребоваться кавычки (например, числовые переменные) или кавычки могут быть смешаны (например, 'где variable in (" do not ", ' «дон», «и т. д.»).) –

1

Вы можете стремиться слишком много автоматизации. Используя тот факт, что там, где может стоять отдельно, я бы предложил модификацию следующим образом:

%macro obs(indsn=, outdsn=, filter=); 

data &outdsn; 
    set &indsn;; 
    Where &filter; 
run; 

proc print data= &outdsn;run; 

%mend obs; 

%obs(indsn=infos, outdsn=ch, filter=name ? 'Namo'); 

Если вы в конечном итоге с очень сложными фильтрами, которые испытывают проблемы разбираемый через вам может понадобиться, чтобы скрыть строку фильтра

+1

Согласен. Мне нравится передавать выражение для предложения where в одном параметре, а не использовать несколько параметров для передачи разных терминов. Мне также нравятся имена параметров, которые являются ключевыми словами SAS, поэтому я буду параметризовать это как '% obs (data = infos, out = ch, where = name? 'Namo')'. – Quentin

 Смежные вопросы

  • Нет связанных вопросов^_^