如何分配最后一个var

时间:2014-09-12 03:07:09

标签: sas

我有一个大数据集,例如

ca1   ca2   ca3   ca4   ca5   ca6   ca7   ca8   ca9
 1     1     8     8     8     8     8     8     8
 1     0     0     8     8     8     8     8     8
 1     1     8     8     8     8     8     8     8
 0     8     8     8     8     8     8     8     8
 0     2     2     2     1     8     8     8     8
 0     0     0     1     2     1     8     8     8

我想在第一个var = 8之前捕获var,但忽略2,例如

ca1   ca2   ca3   ca4   ca5   ca6   ca7   ca8   ca9   new   type

 1     1     8     8     8     8     8     8     8     1     2
 1     0     0     8     8     8     8     8     8     0     3
 1     1     8     8     8     8     8     8     8     1     2
 0     8     8     8     8     8     8     8     8     0     1
 0     2     2     2     1     8     8     8     8     1     5
 0     0     0     1     2     1     8     8     8     1     6

new意味着新的var 类型意味着哪个地方

我怎么能在sas做 非常感谢

2 个答案:

答案 0 :(得分:1)

您可以像这样使用带有do循环的数组。

data bidata2;
    set bigdata;
    array c ca1--ca9;
    do i = 1 to 9;
        if c(i)=8 then leave;
        else if c(i) NE 2 then type = i;
    end;
    if type NE . then new = c(type);
drop i;
run;

答案 1 :(得分:0)

我不清楚什么"忽略2"手段。如果它没有真正考虑事物,那么这是一个有趣的whichn应用程序,它标识第二个到第一个参数中与第一个参数相等的第一个值。

data want;
  set have;
  array ca[9];
  type = whichn(8,of ca[*])-1;
  *what if it is all 8s - handle that somehow;
  new = ca[type];
run;

如果2出现在这个位置是一个问题(并且可能),那么你可能需要使用Pekka的版本(这可能更多'标准'但如果有点慢,如果这是一个非常大的数据集。)