Как вставить данные таблицы SAS, а также жестко запрограммированные значения в базу данных DB2 в SAS - PullRequest
0 голосов
/ 03 ноября 2019

Я новичок в SAS, получая ошибку BldngID (столбец таблицы SAS) не распознается или не обнаруживается ошибка, когда я пытаюсь получить доступ к данным из таблицы sas 'DENSITY' для вставки в таблицу DB2 'PI_INTERN'. Разве невозможно напрямую указать столбцы таблицы SAS для вставки в DB2?

Вот мой код:

Proc sql;
Connect to DB2(SSID=DSNT);
Create table DENSITY as
Select BldngID, Num_Tenure
From PIDB;
Disconnect from DB2;

%Put &Sqlxmsg;
%Put &Sqlxrc;

В журнале SAS: таблица WORK.DENSITY, созданная из 4 строк и 2 столбцов.

/* Insert into PI_INTERN table
Data _NULL_;
Set DENSITY;
Call execute(“Proc SQL;
Connect to DB2(SSID=DSNT);
Execute
(Insert into XXXX.PI_INTERN
(BldngID,
Num_Tenure,
UserID,
Tme_Upd)
Values
(BldngID,
Num_Tenure,
’AAB1’,
Current Timestamp))
By DB2;
Disconnect from DB2;
Quit;”);
%Put &Sqlxmsg;
%Put &Sqlxrc;
Run;

1 Ответ

1 голос
/ 04 ноября 2019

У вас есть два варианта, один из них - подключиться к БД с помощью оператора LIBNAME, а затем использовать PROC APPEND для вставки данных.

libname demo odbc dsn="myDB" schema='dbo';

proc append base=demo.dbTable data=sashelp.class;
run;

В противном случае вы можете сгенерировать операторы INSERT INTO из шага данных, используя CALL EXECUTE.

Это пример того, как это работает с запросом набора данных не (вставкой), но должен дать вам четкое представление о том, как он работает. Сначала вам нужно убедиться, что у вас разработан запрос, а затем попытаться выполнить его с помощью CALL EXECUTE ()

. Я использовал переменные str # в качестве промежуточных шагов, чтобы вы могли увидеть генерируемый код и его работу для построения. твой собственный.

*create fake data to simulate ID list;
data have;
input id $;
cards;
Alfred
Jane
;
run;

Data demo;
set have end=eof;

*this runs once at the beginning only;
if _n_=1 then
    do;
        str1 = "proc sql stimer ;
            select * from sashelp.class
            where name in (";
        call execute(str1);
    end;

 *this changes for each line;
str2 = quote(trim(id));
call execute(str2);

*this runs once for every line EXCEPT the last line, adds a comma for the query to be valid;
if not eof then do;
    str3 = ", ";
    call execute(str3);
 end;

*this runs once, only at the end to close query;
if eof then
    do;
       str4 = ");";
        call execute(str4);
    end;
run;
...