【问题标题】:Is it possible to read RAW data type in SAS?是否可以在 SAS 中读取 RAW 数据类型?
【发布时间】:2026-02-17 17:05:01
【问题描述】:

我正在使用 SAS,并且我正在通过 ODBC 连接使用来自 Oracle 数据库的数据。在 Oracle SQL Developer 环境中,我需要从该数据库中获取 data_type = RAW 的一些字段。

SAS 错误地读取了这些内容,并将每个字段都返回为 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A,其中 Type = Character and Format 和 Informat = $HEX40。

我尝试做的一件事是将它作为字符变量读入,使用字符格式和使用以下代码的信息,其中 mylib 是连接到 Oracle 数据库的库。

data want;
set mylib.have (obs= 10000);
format raw_data_var char40.;
informat raw_data_var char40.;
run;

这将格式更改为字符,但随后将单元格转换为********************

我还尝试找到一些关于读取二进制数据的 SAS 文档,https://documentation.sas.com/?docsetId=lrcon&docsetTarget=p1vu9u7w1ieua7n17973igt2cq3c.htm&docsetVersion=9.4&locale=en 但不幸的是,我找不到有用的帮助。

有人可以指出我使用数据步骤或 proc sql 读取原始数据类型的正确方向吗?

谢谢

【问题讨论】:

  • 如果不是 '2A'x 重复 20 次,您希望 RAW 对象的前 20 个字节包含什么?为什么不直接要求 Oracle 将其转换为十六进制字符串,以便 SAS 将其视为字符变量?
  • 第一个问题不是反问。如果您不知道正确答案是什么,您怎么知道 SAS 显示的内容是错误的?您不必修改 Oracle 数据库以要求 Oracle 转换其一侧的值。请参阅@Richard 的答案。

标签: sas


【解决方案1】:

您可以将Proc SQL 与利用Oracle 函数RAWTOHEX 的传递查询一起使用

proc sql;
  connect using mylib;
  create table want as 
  select 
    a,b,c,input(rawhexed,$HEX32000.) as raw16kchars 
  from
    connection to mylib
    (
        select a,b,c,rawtohex(myraw) as rawhexed
        from have /* oracle side reference */
    )
  ;


quit;

【讨论】: