当我尝试将成员列表上传到我们的 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 在评论中的担忧,即不是 Viewtable 搞砸了,这里是临床数据的 PROC FREQ 的输出,表明确实存在缺失。
BellevueBob 的答案适用于缺少数据是字符的情况,但以相同的方式创建数据表,但使用数字数据,该解决方案不像处理字符数据那样工作。