Proc SQL 到 Postgres UFT8 数据库:不可打印字符显示为正常问号,无法删除

问题描述 投票:0回答:1

我需要针对我面临的问题提供建议: 我使用 SAS 9.4(桌面版本)通过 Unicode Postgres ODBC 驱动程序连接到 Postgres 数据库。 我正在使用 proc sql 语句来检索数据并创建 sas 数据文件。

有一个问题: PgAdmin 数据库中的一个条目具有以下值:“CAR ”

但是当我查看 proc sql 创建的 SAS 数据文件时,它看起来像这样:“CAR ?” 只是一个普通的问号。

带有

_FIELD = compress(_FIELD, ,'kw');
的压缩功能似乎不起作用,因为问号只是一个普通的问号,而不是不可打印的字符。

Postgres 数据库使用 UTF8 作为服务器编码。 ODBC 连接使用 Unicode Postgres 驱动程序。 我尝试使用英语(创建 Wlatin1 数据集)和 Unicode 选项(创建 UTF8 数据集)运行 SAS,但没有任何变化。

我希望能够删除这个角色。

任何提示或建议都会有帮助。

谢谢!

postgresql utf-8 character-encoding sas
1个回答
0
投票

我意识到这个问题已经存在超过 2 1/2 年了,但是您是否能够直接连接到 Postgres DB,并在 SAS 中传递之前去除其中的非 ASCII 字符?例如,使用 this answer 去除非 ASCII 字符,您可能可以执行以下操作:

proc sql;

    CONNECT TO ODBC (dsn=OSBCcon);

    CREATE TABLE work.tableA as 
    SELECT * FROM CONNECTION TO ODBC
    (
        SELECT regexp_replace(_FIELD, '[^[:ascii:]]', '', 'g') AS field_ascii
        FROM my_database.tableA 
        WHERE ID=123 and _FIELD2=AB
    );

    DISCONNECT FROM ODBC;

quit;
© www.soinside.com 2019 - 2024. All rights reserved.