如何在SAS中使用min / max变量进行简单数学运算

时间:2015-03-20 15:01:36

标签: sas

我目前正在SAS中运行宏代码,我想对max和min进行计算。现在我的代码行是:

hhincscaled = 100*(hhinc - min(hhinc) )/ (max(hhinc) - min(hhinc));
hhvaluescaled = 100*(hhvalue - min(hhvalue))/ (max(hhvalue) - min(hhvalue));

我想做的是通过下面的计算重新调整家庭收入和价值变量。我试图减去每个变量的最小值并从相应的最大值中减去它,然后将其乘以100进行缩放。我不确定这是否正确,或者SAS是否正在识别代码我希望它的方式。

2 个答案:

答案 0 :(得分:2)

我假设您正处于数据步骤中。数据步骤对数据集中的记录具有隐式循环。您只能访问当前循环的记录(有一些例外)。

" SAS"这样做的方法是计算最小值和最大值,然后将它们添加到数据集中。

Proc sql noprint;
create table want as
select *,
       min(hhinc) as min_hhinc,
       max(hhinc) as max_hhinc,
       min(hhvalue) as min_hhvalue,
       max(hhvalue) as max_hhvalue
from have;
quit;

data want;
set want;
hhincscaled = 100*(hhinc - min_hhinc )/ (max_hhinc - min_hhinc);
hhvaluescaled = 100*(hhvalue - min_hhvalue)/ (max_hhvalue - min_hhvalue);

/*Delete this if you want to keep the min max*/
drop min_: max_:;
run;

答案 1 :(得分:1)

另一种SAS方法是使用PROC MEANS(或PROC SUMMARY或您选择的替代方法)创建最大/最小表并将其合并。不需要SQL知识,也可能需要相同的速度。

proc means data=have;
  *use a class value if you have one;
  var hhinc hhvalue;
  output out=minmax min= max= /autoname;
run;

data want;
  if _n_=1 then set minmax;  *get the min/max values- they will be retained automatically and available on every row;
  set have;
  *do your calculations, using the new variables hhinc_max hhinc_min etc.;
run;

如果你有一个课堂陈述 - 即一个像州一样的分组'或者类似的 - 在proc means中添加,然后在您的类变量中merge代替want中的第二个集合。它需要一个排序的(初始)数据集来合并。


您还可以选择在SAS-IML中执行此操作,这与您上面的思考方式更为相似。 IML是SAS交互式矩阵语言,与SAS基本语言更相似rmatlab