条件合并SAS PROC SQL

时间:2017-01-10 13:14:29

标签: sql sql-server sas

在我的原始代码中,我想合并几个数据库:

%let theft=1;

proc sql;
create table NewTable as
Select *

From 
   dtm_sitecom.FactSitecAllCriteria SITEC

 left join dtm_sitecom.FactClaimLastVersion FactClaimLastVersion
    on FactClaimLastVersion.ClaimId = Sitec.ClaimId

/*Condition 1 here*/
/*If &Theft=1 then*/
 left join dtm_sitecom.DimClaimState DimClaimState
    on DimClaimState.ClaimStateKey = FactClaimLastVersion.ClaimStateKey

/*Condition 2 here*/
/*else if &Theft = 0 then*/
 left JOIN dtm_sitecom.DimGeoRisk dgr 
    ON dgr.GeoRiskKey = SITEC.GeoRiskKey;
quit;

在升级版本上,我想在代码中添加一些条件(/ 条件1 /和/ 条件2 /),例如,如果值变量Theft=1然后与talbe dtm_sitecom.DimClaimState合并,否则与其他表合并。我尝试了代码,就好像if周围没有注释符号,但由于语法错误而无效。是否有任何SAS语法允许我这样做?

1 个答案:

答案 0 :(得分:2)

如果要加入数据中的变量,可以在on语句中包含该变量:

data class_attach_m;
  set sashelp.class;
  attach_var='M';
run;

data class_attach_f;
  set sashelp.class;
  attach_var='F';
run;

proc sql;
  create table class as
    select class.*, coalescec(class_attach_m.attach_var,class_attach_f.attach_var) as attach_var from sashelp.class
    left join class_attach_m 
    on class.name = class_attach_m.name
      and class.sex='M'
    left join class_attach_f
    on class.name = class_attach_f.name
      and class.sex='F'
  ;
quit;

coalescec(或coalesce用于数字)结合了两个带入的字段。

如果您使用宏变量来控制您运行的变量,则需要在宏中运行它;如果你在宏观环境中,可以使用%if来控制执行的内容。

例如,使用上一个示例 - 我使用宏参数而不是%let,因为这是正确的方法,尽管您可以使用%let更早地定义该参数并将其用于参数调用:

%macro attach_which(attach_m=M);

proc sql;
  create table class as
    select class.*, attach_var from sashelp.class
    %if &attach_m=M %then %do;
      left join class_attach_m 
      on class.name = class_attach_m.name
    %end;
    %else %do;
      left join class_attach_f
      on class.name = class_attach_f.name
    %end;
  ;
quit;
%mend attach_which;

%attach_which(attach_m=M);