我在数据集中有三列:spend
,age_bucket
和multiplier
。数据看起来像......
spend age_bucket multiplier
10 18-24 2x
120 18-24 2x
1 35-54 3x
我想要一个数据集,其中列为年龄桶,行为乘数,条目为支出列的总和(或其他聚合函数)。有proc
这样做吗?我可以使用proc SQL
轻松完成吗?
答案 0 :(得分:2)
有几种方法可以做到这一点。
data have;
input spend age_bucket $ multiplier $;
datalines;
10 18-24 2x
120 18-24 2x
1 35-54 3x
10 35-54 2x
;
proc summary data=have;
var spend;
class age_bucket multiplier;
output out=temp sum=;
run;
首先,您可以使用PROC SUMMARY
来计算相关变量的聚合,在这种情况下求和。 CLASS
语句为您提供了总结的东西。这将计算N路和,输出数据集将包含它们。运行代码并查看数据集temp
。
接下来,您可以使用PROC TRANSPOSE
来旋转表格。我们需要使用BY
语句,因此需要PROC SORT
。我也会过滤你关心的聚合。
proc sort data=temp(where=(_type_=3));
by multiplier;
run;
proc transpose data=temp out=want(drop=_name_);
by multiplier;
var spend;
id age_bucket;
idlabel age_bucket;
run;
在传统模式下,35-54
不是有效的SAS变量名。 SAS会将您的列转换为专有名称。变量上的标签将保留原始值。请注意,如果以后需要引用该变量,则名称已更改为有效。