我在数据集中有三列:spend
, age_bucket
, 和 multiplier
.数据看起来像...
spend age_bucket multiplier
10 18-24 2x
120 18-24 2x
1 35-54 3x
我想要一个数据集,其中列作为年龄桶,行作为乘数,条目作为支出列的总和(或其他聚合函数)。有没有
proc
去做这个?我可以使用 proc SQL
轻松完成吗? ?
最佳答案
有几种方法可以做到这一点。
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
计算相关变量的聚合,在这种情况下为 sum。 CLASS
声明给你的东西总结。这将计算 N-Way 总和,输出数据集将包含所有这些总和。运行代码查看数据集temp
.接下来你可以使用
PROC TRANSPOSE
旋转 table 。我们需要使用 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 会将您的列转换为专有名称。变量上的标签将保留原始值。请注意,如果您稍后需要引用该变量,名称已更改为有效。关于sas - 如何在 SAS 中创建数据透视表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39875604/