首页 > 解决方案 > SAS - 按不同列的值合计列中的值

问题描述

标题可能有点模棱两可。本质上,使用 SASHELP.SHOES 数据集,我试图通过汇总每个地区的销售额和退货来汇总新表中的数据。例如,我没有 56 行用于在非洲销售的鞋子及其各自的销售/退货值,而是为非洲设置了 1 行,其中包含 TotalSales 和 TotalReturns 列。我需要对原始数据集中的每个区域执行此操作。

我对 SAS 一点也不熟悉,这或多或少是我真正必须在其中编程的第一件事。我尝试了一些带有 IN 或 WHERE 条件的数据步骤变体,proc 表示带有 SUM() 语句的步骤,以及 DO/DO WHILE 循环,但我每次都错过了一些东西。

标签: sasdataset

解决方案


Proc MEANS

  • 使用CLASS语句指定要使用哪些变量对数据进行分组。在你的情况下REGION
  • 使用该VAR语句指定要在每个分组中计算哪些变量的统计数据。

默认输出

对应最小语法

ods listing;
proc means noprint data=SASHELP.SHOES;
   class region;
   var sales returns;
   output out=shoes_stats;
run;

为每个区域的每个统计信息创建WORK.SHOES_STATS一行数据集。

在此处输入图像描述

其他输出结构

  • 使用过程选项NWAY仅获取所有CLASS变量组合的摘要。(在您的情况下,这对应于带有 的行_TYPE_=1
  • 输出列可以使用OUTPUT语句选项将统计名称自动连接到变量名称/ autoname
  • 使用数据集选项来控制保留或删除的变量。
proc means nway noprint data=SASHELP.SHOES;
   class region;
   var sales returns;
   output out=shoes_sums(drop=_type_ _freq_) sum= / autoname;
run;

dm 'vt shoes_sums; column names' viewtable;

在此处输入图像描述


推荐阅读