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

标签 sas

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

enter image description here

关于sas - 如何在 SAS 中创建数据透视表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39875604/

相关文章:

sas - 如何计算 SAS 中宏变量的数据类型

sas - 如何防止 CATx 函数计算表达式

date - SAS错误试图遍历多个数据集

sas - 在 SAS 宏中执行循环

mysql - 在 SAS 中将 SAS 日期时间转换为 UNIX 时间戳

macos - MAC 的 SAS 替代方案

mysql - 延迟启动 SAS EG 中的程序

xml - XML 映射的 PATH 元素中的 POSITION() 函数在 XML 映射器中有效,但在 SAS 代码中无效

loops - 做不等增量循环

javascript - SAS 打印到文件