2016-06-23 2 views
0

Я генерирую синтаксическую ошибку в SAS 9.4 при попытке использовать CATX («|», a1-a5) в PROC SQL.Ошибка синтаксиса с использованием CATX в SAS PROC SQL

Почему первые два выхода работают, но третий не работает?

data test; 
    input a1 $ a2 $ a3 $ a4 $ a5 $; 
    cards; 
    a b c d e 
    f g h i j 
    k l m n o 
    p q r s t 
    u v w x y 
    ; 
run; 

proc sql; 
    select CATX('|',a1,a2,a3,a4,a5) as catx from test; 
quit; 

data test2; 
    set test; 
    catx=CATX('|',OF a1-a5); 
run; 
proc print data=test2; run; 

proc sql; 
    select CATX('|',OF a1-a5) as catx from test; 
quit; 

Первый прок SQL и шаг данных производят ожидаемый «а | B | C | d | е» и т.д. Но третья процедура SQL вызывает ошибку синтаксиса указал на «a1»:

32 proc sql; 
33  select CATX('|',OF a1-a5) as catx from test; 
          -- 
          22 
ERROR 22-322: Syntax error, expecting one of the following: !, !!, &, (, *, **, +, ',', -, '.', /, <, <=, <>, =, >, >=, ?, AND, BETWEEN, 
       CONTAINS, EQ, EQT, GE, GET, GT, GTT, LE, LET, LIKE, LT, LTT, NE, NET, OR, ^=, |, ||, ~=. 

Благодаря

+1

Похоже, вы растягиваете гибкость/полную интеграцию с sql в sql с другими частями языка sas. Явным образом, к сожалению, ваш лучший снимок здесь. Если у вас нет десятков столбцов, в этом случае макро-переменная может помочь. –

ответ

0

Вы попали один из этих стен в Proc SQL, где некоторые базовые функции SAS не поддерживается полностью. Как упоминалось ранее, вам лучше создавать макропеременные, содержащие столбцы, необходимые для вашей конкатенации.

вот быстрый пример:

proc sql noprint; 
select name into :cols separated by ',' 
from dictionary.columns 
where libname = "WORK" and 
memname = "TEST"; 
quit; 
%put &cols; 
proc sql; 
    select CATX('|',&cols) as catx from test; 
quit; 

Очевидно, ваша статья where будет более сложным в качестве исходного набора данных может содержать столбцы не требуется в выражении CATX.

0

Этот синтаксис «OF a1-a5» указан только для кода данных. Процедура «proc sql» sas - самый простой код sql, и он не может быть смешан с кодом шага данных.

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