如何在记录之前“将所有响应值中的最小正值的一半”加到所有响应值中“

时间:2017-07-19 01:56:44

标签: sas transformation

我的一些响应变量的值为零。我想找到正的最小值,除以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
;

感谢您的任何建议

1 个答案:

答案 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;