SAS读取sql server 2005中的位数据类型

发布于 2024-10-22 20:17:15 字数 159 浏览 5 评论 0原文

我有一个 sql server 2005 数据库,其中有一个表,其中有一列数据类型为 bit。当我在 sql server management studio 中查看数据时,我看到列值为 0 或 1,当我使用 SAS 拉取时,我看到 0 或 -1,就像 SAS 否定 1 值一样。有人对此有解释吗?谢谢。

I have a sql server 2005 database that has a table with a column of data type bit. When I look at the data in sql server management studio I see the column value as 0 or 1, when i pull with SAS I see 0 or -1, is like SAS is negating the 1 value. Anyone have an explanation for this? Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

很糊涂小朋友 2024-10-29 20:17:15

我认为您必须使用 libname oledb 从 SAS 连接到 SQL Server。我可以在这里复制您的问题:-

生成虚拟数据的 SQL Server 代码

create table dbo.tbl (
    tblId           int identity(1,1)   not null
                    constraint pk_tbl_tblId primary key,

    bool        bit not null,
)
go

insert into dbo.tbl(bool) values(0)
insert into dbo.tbl(bool) values(1)

使用 OLEDB 的 SAS 代码

libname imm oledb provider=sqloledb
        properties=(
            "Integrated Security"=SSPI
            "Persist Security Info"=False
            "Initial Catalog"=test
            "Data Source"=localhost
        );

proc print data=imm.tbl; run;

打印输出为:-

Obs          tblId    bool

1              1      0
2              2     -1

使用 PROC SQL 的 SAS 代码 。

看来使用 PROC SQL 应该可以解决您的问题

proc sql noprint;
    connect to sqlservr (
        server='localhost' 
        database='test' 
        'Integrated Security'='SSPI' 
        'Persist Security Info'='False'
    );

    create table test as
    select *
    from connection to sqlservr (
        select * from dbo.tbl
    );

    disconnect from sqlservr;
quit;

proc print data=test; run;

打印输出为:-

Obs          tblId    bool

1              1      0
2              2      1

I reckon you must be using libname oledb to connect to SQL Server from SAS. I'm able to replicate your problem here:-

SQL Server code to generate dummy data

create table dbo.tbl (
    tblId           int identity(1,1)   not null
                    constraint pk_tbl_tblId primary key,

    bool        bit not null,
)
go

insert into dbo.tbl(bool) values(0)
insert into dbo.tbl(bool) values(1)

SAS code using OLEDB

libname imm oledb provider=sqloledb
        properties=(
            "Integrated Security"=SSPI
            "Persist Security Info"=False
            "Initial Catalog"=test
            "Data Source"=localhost
        );

proc print data=imm.tbl; run;

The print out is:-

Obs          tblId    bool

1              1      0
2              2     -1

SAS code using PROC SQL

It seems like using PROC SQL should fix your problem.

proc sql noprint;
    connect to sqlservr (
        server='localhost' 
        database='test' 
        'Integrated Security'='SSPI' 
        'Persist Security Info'='False'
    );

    create table test as
    select *
    from connection to sqlservr (
        select * from dbo.tbl
    );

    disconnect from sqlservr;
quit;

proc print data=test; run;

The print out is:-

Obs          tblId    bool

1              1      0
2              2      1
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文