3

我坐在那里,我可以达到预期的结果,但我想知道是否有更快的方法来做到这一点。

很长的路会是这样的;

         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;

我知道上面的代码是不正确的,这只是我的思考过程的一个演示。任何帮助是极大的赞赏。

4

2 回答 2

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));

或类似的东西。在这种特殊情况下,mean(of xyz) 将等同于 coalesce(of xyz),但是如果您的解决方案在多个存在时不能仅使用一个,那么您可以将其插入那里。

于 2013-07-29T14:05:36.790 回答
1

这与您描述的不太一样coalesce,但请参阅功能:http: //support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a002518172.htm

value = coalesce(x, y, z);

这会将或x的第一个非缺失值分配给。yzvalue

于 2013-07-29T12:34:18.203 回答