3

我们有一个充满 BIGINT 数据类型的 teradata 数据库。SAS 是组织的主要分析引擎。SAS 访问库在 BIGINT 上阻塞,因此强制所有代码在将变量返回给 SAS 之前将它们转换为整数或小数。例子:

proc sql;
connect to database (blah blah);
create table sas_dataset as 
  select * from connection to database(
    select
      cast(bigint_var as integer),
      varchar_var,
      char_var,
    from some_table
    );
  disconnect from database;
  quit;

有谁知道解决这个问题的方法?可能是用于转换变量或 SAS 访问修复的宏?请记住,这个数据库中实际上有数千个变量是 bigint 并且对数据库进行更改是不可能的。

4

3 回答 3

4

如果您无法在 SAS 端修复它,您始终可以在 Teradata 端创建一组视图来进行转换。然后让 SAS 访问视图:

create view sas_cast_db.some_table as 
select col1, col2, cast(bigint_var as decimal(18)), col3
from real_db.some_table;

由于您有很多表,因此可以编写一些 SQL 来从数据字典中自动生成这些表。

于 2009-06-04T22:42:10.517 回答
1

问题是 SAS 最多只能处理 BIGINT 数据类型的 15 位数字。针对这个问题,SAS 为 SAS 9.2(上面提到的一个)提供了一些解决方法。您还可以让您的 SAS 平台管理员安排更新 SAS 服务器,以便将 BIGINT 字段截断为 15 位(适用明显的警告),或更新您的 LIBNAME 语句以将所有 BIGINT 设置为自动转换。

http://support.sas.com/kb/39/831.html

于 2012-01-10T05:15:34.913 回答
-1

示例代码

data temp1; 
   set mylib.bigclass (dbsastype= (id='char(20)'));
run;
于 2014-04-12T13:55:13.820 回答