我有一个大数据集,例如
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做 非常感谢
答案 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的版本(这可能更多'标准'但如果有点慢,如果这是一个非常大的数据集。)