我有一个数据集三列:spend,age_bucket,和multiplier。数据看起来像...
spend age_bucket multiplier
10 18-24 2x
120 18-24 2x
1 35-54 3x
Run Code Online (Sandbox Code Playgroud)
我想要一个数据集,其中列作为年龄桶,行作为乘数,条目作为支出列的总和(或其他聚合函数)。有没有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;
Run Code Online (Sandbox Code Playgroud)
首先,您可以用于PROC SUMMARY计算相关变量的聚合,在本例中为 sum。该CLASS声明为您提供了总结。这将计算 N-Way 总和,输出数据集将包含所有这些总和。运行代码并查看数据集temp。
接下来您可以使用它PROC TRANSPOSE来旋转表格。我们需要使用一个BY语句,所以 aPROC 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;
Run Code Online (Sandbox Code Playgroud)
在传统模式下35-54不是有效的 SAS 变量名。SAS 会将您的列转换为专有名称。变量上的标签将保留原始值。请注意,如果您稍后需要引用该变量,名称已更改为有效。