SAS SQL - if列的CASE语句,如果不存在,则为空

时间:2015-08-28 14:18:23

标签: sql sas case create-table

我正在运行一系列导入的文件并将它们加载到创建的工作表中,然后将它们附加到最终表。但是,在最终表格中我需要的一个变量并不存在于所有导入的文件中。

我遇到的问题是,每当我运行以下代码的变体时,我都会收到错误消息"在贡献表中找不到以下列:CAA_SERVICE_NUMBER"对于不包含该变量的导入文件:

%if %trim(&import.)=STA %then %do;
   proc sql;
      create table work.Worf as
      select ACCOUNT_NUMBER,
         APPL_ID,
         PROCESS_COST_CENTER,
         "" AS FIELD_NAME,
         COST_DRIVER_ID,
         CASE When (CAA_SERVICE_NUMBER IS NOT NULL) THEN (CAA_SERVICE_NUMBER) ELSE ("") END AS CAA_SERVICE_NUMBER,
            "&Extract" AS Purvis,
         1 AS Count
       from sysval.Friar;
   quit;
%end;

有没有办法可以利用代码/案例陈述基本上说"如果列中没有列,那么请填空,否则如果列确实存在则取值从该列到新列"没有收到上述错误?

我会"挂断电话"。谢谢!

1 个答案:

答案 0 :(得分:0)

您当然可以查询dictionary.columns并提前确定它是否存在,然后使用%if不显示该名称。

但更容易创建一个 拥有它的视图。

data friar_view/view=friar_view;
  set sysval.friar;
  if missing(CAA_Service_Number) then caa_service_number=" ";
run;

(如果它是数字,则数字丢失,但它看起来像上面查询中的char变量)。然后在sql查询中使用该视图,它将始终存在!