我的一些响应变量的值为零。我想找到正的最小值,除以2,并在记录之前将该数量加到所有原始值。请帮我这样做。这是我目前的代码,但似乎不对。
data dat; set dat;
lvar = log(var + (min(var) / 2));
run;
以下是一些示例数据
data dat;
cards;
a var
1 0
2 5
3 6
4 7
5 10
6 2
7 0
8 4
9 0
;
感谢您的任何建议
答案 0 :(得分:2)
在DATA步骤中,您可以使用双DoW循环执行此操作。您可以将循环显式化,而不是依赖于隐式DATA步骤循环。在一个DATA步骤中,您读取数据一次以找到最小值,然后再次读取它以计算lvar和输出记录。
类似的东西:
data want;
*loop through all records, to find the minimum;
do until(eof);
set dat end=eof;
if var ne 0 then minvar=min(var,minvar);
end;
eof=0; *reset eof flag;
*loop through the records again, computing lvar;
*and outputting each record;
do until(eof);
set dat end=eof;
lvar=log(var+minvar);
put (_all_)(=);
output;
end;
run;