SAS -> Оболочка DB2 Passthrough и макроопределение - PullRequest
1 голос
/ 02 сентября 2011

Я пытаюсь автоматизировать работу, которая включает в себя большое количество данных, передаваемых по сети и между фактическим сервером db2 и нашим сервером SAS. То, что я хотел бы сделать, это сделать традиционный проход через ...

proc sql;
 connect to db2(...);
 create table temp as 
 select * from connection to db2(
    select
     date 
    .......
    where 
     date between &start. and &stop.
); disconnect from db2;
quit;

примерно так:

x "db2 'insert into temp select date ...... where date between &start. and &stop.'";

Я сталкиваюсь с несколькими проблемами, первая из которых - это формат даты db2 'ddMONyyyy'd, который вызывает преждевременное завершение команды оболочки. Если я могу обойти это, я думаю, что это должно работать.

Я могу передать макро переменную на сервер AIX (SAS) без дополнительного набора '', необходимого для выполнения команды db2.

Есть мысли?

1 Ответ

2 голосов
/ 02 сентября 2011

Вы можете обойти одиночную кавычку вокруг вопроса о дате, выделив предложение WHERE с круглыми скобками.Я не уверен, что это сработает, но, возможно, стоит попробовать.

Что касается команды X, попробуйте что-то вроде следующего:

%let start = '01jan2011'd;
%let stop  = '31dec2011'd;

%let command_text = db2 %nrbquote(')insert into temp select date ... where (date between &start. and &stop.)%nrbquote(');
%put command_text = &command_text;
x "&command_text";
...