2016-03-15 50 views
1

我有一个变量的权重,wprm,它采用整数值。我想有一个是重量“正常化”,即wprm/总和(wprm)正常化一个变量(除以其总数)

我能做到这一点的outputing一个proc summary蚂蚁那么merge把它带回了原始数据,然后把我的wprm变量,但是看起来有点沉重,有没有更简单的方法?

+1

PROC STDIZE或STANDARD - 各种方法以标准化数据。 – Reeza

+0

我有点好奇,为什么你觉得它很重。在大多数情况下,PROC MEANS/SUMMARY是相当快的,并且是更好的方法之一(尽管同意PROC STDIZE更适合您的特殊情况)。 – Joe

+0

也许沉重是多报。这是我的代码简化和个人好奇心的问题。 –

回答

2

使用PROC STDIZE或PROC STANDARD - 它们都允许各种标准化方法。

proc stdize data=have method=sum out=want; 
var wprm; 
run; 
0

您可以从here获取宏%simple_normalize

data test; 
    do i=1 to 10; 
    output; 
    end; 
run; 

%simple_normalize(test,i); 
+1

我不会推荐这个宏。将数字转换为字符以用于显示以外的任何目的绝不是一个好主意。带有32位数字的 –

+0

,涵盖了所有可用的精度。 https://en.wikipedia.org/wiki/Double-precision_floating-point_format#IEEE_754_double-precision_binary_floating-point_format:_binary64 – DomPazz

+0

也许大部分时间都够用了,但我不会指望BEST32。转换为字符,并返回到数字没有很好的理由似乎有点天真。 –

0

另一个常见的选择是SQL,但它会发布警告/注意到许多人不喜欢的日志。

proc sql; 
create table want as 
select a.*, a.wprm/sum(a.wprm) as weight 
from have; 
quit;