如何在 SAS 中创建数据透视表?

Dem*_*nos 5 sas

我有一个数据集三列:spendage_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吗?

Dom*_*azz 5

有几种方法可以做到这一点。

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 会将您的列转换为专有名称。变量上的标签将保留原始值。请注意,如果您稍后需要引用该变量,名称已更改为有效。

在此处输入图片说明