基本上,我想要做的是在改变表时使用min / max函数。我正在改变一个表,添加一个列,然后将该列设置为min / max函数的组合。但是,在SAS中,您无法使用汇总功能。有办法解决这个问题吗?
还有更多输入,但为了清晰起见,下面是简要版本!谢谢!
%let variable = 42
alter table X add Z float;
update X
set C = min(max(0,500 - %sysevalf(variable)),0);
答案 0 :(得分:1)
首先,我们删除%sysevalf()
,不需要它们,并为可读性而格式化
alter table claims.simulation add Paid_Claims_NoISL float;
update claims.simulation
set Paid_Claims_NoISL
= min(
max(0
, Allowed_Claims -&OOPM
, min(Allowed_Claims
,&Min_Paid+ max(Allowed_Claims - &Deductible * &COINS
,0
)
)
, &Ind_Cap_Claim
)
);
请注意,第一个min()
只有一个参数。这导致你的错误。 SAS认为因为它只有1个输入,所以你想要汇总一个列,这在更新中是不允许的。
只要把它拿出来就可以了:
alter table claims.simulation add Paid_Claims_NoISL float;
update claims.simulation
set Paid_Claims_NoISL
= max(0
, Allowed_Claims -&OOPM
, min(Allowed_Claims
,&Min_Paid+ max(Allowed_Claims - &Deductible * &COINS
,0
)
)
, &Ind_Cap_Claim
);
答案 1 :(得分:0)
要引用您需要使用的宏变量的值&amp ;.
%let mvar = 42;
proc sql;
update X set C = min(max(0,500 - &mvar),0);
quit;
请注意,不需要使用宏函数%SYSEVALF()
,因为当值&mvar
是一个表达式而不是宏处理器时,SAS可以更轻松地处理这种情况。
%let mvar = 500 - 42;
proc sql;
update X set C = min(max(0,&mvar),0);
quit;