【发布时间】:2013-04-18 23:04:41
【问题描述】:
当我尝试将成员列表上传到我们的 DB2 服务器时遇到了这个问题,并创建了一个最小示例来解释这个问题。
为了将 SAS 9.2 中本地创建的数据表连接到我们的 DB2 数据仓库中的表(通过与 ODBC 驱动程序的连接访问),我的过程是将这些本地表放在同一台服务器上(不同的模式)包含索赔。这样做的主要目的是过滤出上传列表中包含 member_ID 的声明列表。
如果本地数据的第一行有缺失值(有时成员可能没有一条标识信息),则本地端的数据在上传到 DB2 模式时会丢失几个非缺失值.我附上了一个带有非敏感信息的玩具示例以突出问题。
PROC IMPORT OUT= WORK.druglist DATAFILE= "C:\Users\caden2\Desktop\druglist.xls"
DBMS=EXCEL REPLACE;
RANGE="'Tab 4# Asthma Meds$'";
RUN;
DATA for_clinical;
SET druglist(KEEP= Drug_Class Drug_Type Generic GPI);
IF _N_ = 4 THEN DELETE;
IF _N_ <= 10;
IF _N_ = 1 THEN DO;
Drug_Class='';
Drug_Type='';
Generic='';
END;
RUN;
libname clinic odbc user=XXX password=XXX dsn=DWName schema=DWSchema autocommit=yes;
PROC SQL;
DROP TABLE clinic.caden_test;
CREATE TABLE clinic.caden_test AS
SELECT * FROM for_clinical;
QUIT;
PROC IMPORT 和 Data 步骤只是将数据转换为我需要的形式,应该没有任何问题。临床图书馆是使用我的凭据通过与我们的数据仓库的 ODBC 连接创建的。下面的截图显示了本地机器和临床服务器上数据集的前后对比(注意第一行有一些缺失)。我没有发布日志。可怕的是,我的日志没有提供任何错误的迹象。
这是 DB2、SAS 还是 SAS 和 DB2 组合的问题?我无法复制从本地到本地或 DB2 到 DB2 的问题。此外,删除的值始终以对角线形式出现。对于更宽的数据(超过 4 个变量),它从随机行开始,并沿对角线向上和向右移动,直到到达最后一列。
为了解决 BellevueBob 在 cmets 中对 Viewtable 没有搞砸的担忧,这里是临床数据的 PROC FREQ 输出,表明确实存在缺失。
BellevueBob 的答案适用于缺失数据是字符的情况,但以相同的方式创建数据表,但使用数字数据,解决方案不像处理字符数据那样工作。
【问题讨论】:
-
我不确定这是 SAS、DB2 还是 PEBKAC 的错误,所以我标记了前两个。
-
您能否修改您的问题以添加用于
clinic的完整 SASlibname语句?另外,您确定 DB2 表本身具有不正确的列值吗?viewtable是出了名的挑剔。 -
我已更新说明以突出您的疑虑。我已经删除了我的用户名、密码、dsn 和架构,但该声明是一个非常普通的 ODBC 声明。 SQL 调用没有表明“诊所”是远程库还是本地库。