Sas 如何";在所有响应值中加上最小正值的一半;取日志前
我的一些响应变量的值为零。我想找出正的最小值是什么,除以2,在取log之前,把这个值加到所有的原始值上。请帮我做这个。这是我当前的代码,但似乎不正确Sas 如何";在所有响应值中加上最小正值的一半;取日志前,sas,transformation,Sas,Transformation,我的一些响应变量的值为零。我想找出正的最小值是什么,除以2,在取log之前,把这个值加到所有的原始值上。请帮我做这个。这是我当前的代码,但似乎不正确 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 ; 感谢您在数据步骤中提出的任何建议,您可以通过双道循环来实现这一点。不依赖隐式数
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
;
感谢您在数据步骤中提出的任何建议,您可以通过双道循环来实现这一点。不依赖隐式数据步循环,而是显式循环。在一个数据步骤中,您读取一次数据以找到最小值,然后再次读取数据以计算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;
在一个数据步骤中,您可以使用双道循环来实现这一点。不依赖隐式数据步循环,而是显式循环。在一个数据步骤中,您读取一次数据以找到最小值,然后再次读取数据以计算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;
您可以使用SQL而不是数据步骤吗?代码将在SQL中工作,但不是数据步骤,因为MIN函数在两者之间的操作不同。您现在使用它的方式是它在PROC SQL中的工作方式。您可以使用SQL而不是数据步骤吗?代码将在SQL中工作,但不是数据步骤,因为MIN函数在两者之间的操作不同。您现在使用它的方式是它在procsql中的工作方式。