我正在开发SAS应用程序,我的数据集为
dim_point
rk | ID | name | value_0 | value_1 | value_2 | value_3 | value_4
1 | one | one | val_0 | val_1 | val_2 | val_3 | .
2 | two | two | val_0 | val_1 | val_2 | . | .
3 | three | three | val_0 | . | . | . | .
4 | four | four | val_0 | val_1 | . | . | .
我希望将其他列和最后一个非空列的值作为
want
rk | ID | name | value
1 | one | one | val_3
2 | two | two | val_2
3 | three | three | val_0
4 | four | four | val_1
我正在尝试的代码是
proc sql noprint;
create table want as
select rk, ID, name, name as value
from dim_point;
update want
set value = "";
quit;
我不知道如何使用value_ series的最后一个非空列值来更新value列?
答案 0 :(得分:0)
以相反顺序使用coalesce
:
set value = coalesce(value_4,value_3,value_2,value_1,value_0);
您可能需要使用coalescec
代替字符变量。
答案 1 :(得分:0)
虽然当您知道所有列时coalesce
解决方案很好,但可能会出现这些情况,这些情况可能会发生变化,或者明显更多。
在这种情况下,您可以使用数组:
data want ; set have ; array _v{*} value_: ; /* colon operator is a wildcard, loaded in the same order as the input dataset */ /* Loop backwards over the array, stop when we find a non-missing value */ do i = dim(_v) to 1 by -1 until (not missing(value)) ; if not missing(_v{i}) then value = _v{i} ; end ; drop i ; run ;