使用直通 SQL 插入到 DB2 fom SAS 数据集中



我还是SAS和DB2的新手。我有一个 DB2 表,其中有一列存储编码为时间戳的值。我正在尝试从工作目录中的 SAS 数据集将数据加载到此列。但是,其中一些时间戳对应于 01-01-1582 之前的日期,不能在 SAS 中存储为日期时间值。相反,它们存储为字符串。

这意味着,如果我想将这些值加载到 DB2 表中,我必须首先使用 TIMESTAMP(( DB2 函数将它们转换为时间戳,据我所知,该函数需要使用执行语句的直通 SQL(与 SAS ACCESS libname 方法相反(。例如,为了写入单个值,我执行以下操作:

PROC SQL;
connect to db2 (user = xxxx database = xxxx password = xxxx);
execute (insert into xxxx.xxxx (var) values (TIMESTAMP('0001-01-01-00.00.00.000000'))) by db2;
disconnect from db2;
quit;

如何为源数据集中的所有值实现此目的?一个选择...execute 命令中的 from 语句不起作用,因为据我所知,我无法从 DB2 连接中引用 SAS 工作目录。

最终,我可以编写一个宏来执行上面的 PROC SQL 块,并在每个观察的数据步骤中调用它,但我想知道是否有更简单的方法可以做到这一点。更改变量的类型不是一种选择。

提前谢谢。

一种复杂的解决方法是使用call execute

data _null_;
set sas_table;
call execute("PROC SQL;
connect to db2 (user = xxxx database = xxxx password = xxxx);
execute (
insert into xxxx.xxxx (var)
values (TIMESTAMP('"||strip(dt_string)||"'))
) by db2;
disconnect from db2;
quit;");
run;

其中sas_table是 SAS 数据集,其中包含存储为字符串和名为dt_string的变量中的日期时间值。

这里发生的情况是,对于数据集中的每个观察结果,SAS 将执行execute调用例程的参数,每次的当前值为dt_string

另一种使用宏而不是调用执行来执行基本相同操作的方法:

%macro insert_timestamp;
%let refid = %sysfunc(open(sas_table));
%let refrc = %sysfunc(fetch(&refid.));
%do %while(not &refrc.);
%let var = %sysfunc(getvarc(&refid.,%sysfunc(varnum(&refid.,dt_string))));
PROC SQL;
connect to db2 (user = xxxx database = xxxx password = xxxx);
execute (insert into xxxx.xxxx (var) values (TIMESTAMP(%str(%')&var.%str(%')))) by db2;
disconnect from db2;
quit;
%let refrc = %sysfunc(fetch(&refid.));
%end;
%let refid = %sysfunc(close(&refid.));
%mend;
%insert_timestamp;

编辑:我想您也可以使用 SAS/ACCESS 在 DB2 中按原样加载表,然后使用 sql 直通将字符串转换为时间戳。类似的东西

libname lib db2 database=xxxx schema=xxxx user=xxxx password=xxxx;
data lib.temp;
set sas_table;
run;
PROC SQL;
connect to db2 (user = xxxx database = xxxx password = xxxx);
execute (create table xxxx.xxxx (var TIMESTAMP)) by db2;
execute (insert into xxxx.xxxx select TIMESTAMP(dt_string) from xxxx.temp) by db2;
execute (drop table xxxx.temp) by db2;
disconnect from db2;
quit;

相关内容

  • 没有找到相关文章

最新更新