我有一个数据集,其行数和列数以列为单位,如下所示。
我想创建一个辅助列,记录每行不为零的第一个值。
ID M1 M2 M3 M4 M5 Auxiliary column
1 0 0 8 8 7 8
2 7 7 7 . . 7
3 0 0 0 0 9 9
4 0 9 9 9 8 9
5 1 1 1 1 1 1
6 0 2 2 1 1 2
目前我正在使用此代码,但我还没有能够获得我想要的结果。有什么想法吗?
data new_ops04;
set new_ops03;
array MONTHS (24) M1-M24;
RETAIN AUXILIARY_COLUMN 0;
do i=1 to 24;
IF MONTHS(i) ne 0 and AUXILIARY_COLUMN = 0 THEN
AUXILIARY_COLUMN = MONTHS(i);
end;
drop i;
run;
非常感谢!
答案 0 :(得分:1)
你非常接近。只需删除retain语句:
firstShape.fill()
firstShape.close()
你需要考虑如果缺少第一个观察会发生什么
答案 1 :(得分:0)
我会在case
中使用proc sql
。但是你的问题是当你达到第一个值时你没有停下来。所以:
flag = 0;
do i=1 to 24 until (flag)
if MONTHS(i) ne 0 and AUXILIARY_COLUMN = 0 THEN
AUXILIARY_COLUMN = MONTHS(i);
flag = 1;
end;
drop i, flag;