在我的原始代码中,我想合并几个数据库:
%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语法允许我这样做?
答案 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);