我有一个变量的权重,wprm,它采用整数值。我想有一个是重量“正常化”,即wprm/总和(wprm)正常化一个变量(除以其总数)
我能做到这一点的outputing一个proc summary
蚂蚁那么merge
把它带回了原始数据,然后把我的wprm变量,但是看起来有点沉重,有没有更简单的方法?
我有一个变量的权重,wprm,它采用整数值。我想有一个是重量“正常化”,即wprm/总和(wprm)正常化一个变量(除以其总数)
我能做到这一点的outputing一个proc summary
蚂蚁那么merge
把它带回了原始数据,然后把我的wprm变量,但是看起来有点沉重,有没有更简单的方法?
使用PROC STDIZE或PROC STANDARD - 它们都允许各种标准化方法。
proc stdize data=have method=sum out=want;
var wprm;
run;
您可以从here获取宏%simple_normalize
。
data test;
do i=1 to 10;
output;
end;
run;
%simple_normalize(test,i);
我不会推荐这个宏。将数字转换为字符以用于显示以外的任何目的绝不是一个好主意。带有32位数字的 –
,涵盖了所有可用的精度。 https://en.wikipedia.org/wiki/Double-precision_floating-point_format#IEEE_754_double-precision_binary_floating-point_format:_binary64 – DomPazz
也许大部分时间都够用了,但我不会指望BEST32。转换为字符,并返回到数字没有很好的理由似乎有点天真。 –
另一个常见的选择是SQL,但它会发布警告/注意到许多人不喜欢的日志。
proc sql;
create table want as
select a.*, a.wprm/sum(a.wprm) as weight
from have;
quit;
PROC STDIZE或STANDARD - 各种方法以标准化数据。 – Reeza
我有点好奇,为什么你觉得它很重。在大多数情况下,PROC MEANS/SUMMARY是相当快的,并且是更好的方法之一(尽管同意PROC STDIZE更适合您的特殊情况)。 – Joe
也许沉重是多报。这是我的代码简化和个人好奇心的问题。 –