Sas 规范化变量(除以其总数)

Sas 规范化变量(除以其总数),sas,Sas,我有一个权重变量wprm,它接受整数值。我希望有一个是权重“归一化”,即wprm/sum(wprm) 我可以通过输出一个proc summaryant,然后是一个merge将其与原始数据放回,然后除以我的wprm变量来实现,但它似乎有点重,有没有更简单的方法 使用PROC标准或PROC标准-它们都允许各种标准化方法 proc stdize data=have method=sum out=want; var wprm; run; 您可以从中获取宏%simple\u normalize 另一个常

我有一个权重变量wprm,它接受整数值。我希望有一个是权重“归一化”,即wprm/sum(wprm)


我可以通过输出一个
proc summary
ant,然后是一个
merge
将其与原始数据放回,然后除以我的wprm变量来实现,但它似乎有点重,有没有更简单的方法

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

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

您可以从中获取宏
%simple\u normalize


另一个常见的选项是SQL,但它会在日志中发布许多人不喜欢的警告/注释

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

Proc STDIZE或STANDARD-各种方法来规范化数据。我有点好奇为什么你认为它很重。PROC MEANS/SUMMARY在大多数情况下都非常快,是实现这一点的更好方法之一(尽管同意PROC STDIZE更适合您的特定情况)。可能heavy是一种夸大。这相当于我代码的简化,加上个人的好奇心。我不推荐使用这个宏。将数字转换为字符用于显示以外的任何用途都不是一个好主意。使用32位数字,您将涵盖所有可用的精度。也许大多数时候它是足够的,但我不会指望BEST32。转换为字符并返回到数字似乎有点幼稚。不,这是足够的100%的时间与双精度数字。
proc sql;
create table want as
select a.*, a.wprm/sum(a.wprm) as weight
from have;
quit;