有没有办法以更快的方式将变量列表中没有丢失的值分配给另一个变量?

时间:2013-07-29 12:30:18

标签: sas

我坐在一个情况下,我可以达到预期的效果,但我想知道是否有更快的方法可以做到。

漫长的道路就是这样;

         if ^missing(X) and nmiss(Y,Z) = 2 then Value = X;
    else if ^missing(Y) and nmiss(X,Z) = 2 then Value = Y;
    else if ^missing(Z) and nmiss(X,Y) = 2 then Value = Z;

这对于一些变量来说很好,但是当你有一个包含更多变量的列表时会发生什么。有没有办法以更快的方式将变量列表中没有丢失的值分配给另一个变量?

喜欢的东西;

    if ^missing(in(X,Y,Z)) then Value = ^missing.value;

我知道上面的代码不正确,它只是我思考过程的一个演示。 非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

您所描述的并非完全,但请参阅coalesce函数:http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a002518172.htm

value = coalesce(x, y, z);

这会将xyz的第一个非缺失值分配给value

答案 1 :(得分:1)

完全像你说的那样做:

if n(of x y z) = 1 then value = coalesce(of x y z);

当然,您仍然需要为非n = 1值分配值。

value = ifn(n(of x y z)=1,coalesce(of x y z), mean(of x y z));

或类似的东西。在那种特殊情况下,平均值(x y z)将等于coalesce(x y z),但是如果你的解决方案存在多个只能用于一个,那么你可以将其插入那里。