SAS:从一个数据集中检索小计并将其附加到另一个数据集中的变量

SAS: Retrieve a subtotal from one dataset and append it to the variables in another

我创建了一个名为 work.saleanalysis 的摘要数据集,其中包含三个变量和三个观察值:

Sale_Analysis             SA_Count          SA_Amount  

Beginning Sale Amount     11796             15861502.76
Redeemed                  2026               2742861.09
Final Sale Amount         9770              13118641.67 

我创建了第二个摘要数据集 work.removals。

Reason                 ES_Count             ES_Amount

Size                     1312                  316639
Value                    3101                 2083563
Type                     1211                 2418995
Other                       9                   15869
Old                        96                  154821
Bad                       245                  513487

我想找出 ES_Amount / SA_Amount 其中 SA_Amount = "Final Sale Amount" 并将该列添加到 work.removals。换句话说,"what percentage of the final sale amount of the whole file is included in each removal bucket?"

这个练习在 excel 中超级简单,但在 SAS 中却让我感到沮丧。

如有任何帮助,我们将不胜感激。

如果我没看错,您只需要将 Sale_Analysis 中的一个值复制到 Removals 的每一行中。

有很多好的方法可以做到这一点,但最简单的方法是:

data removals_2;
  set removals;
  if _n_=1 then set saleanalysis(where=(sale_analysis='Final Sale Amount') keep=sale_analysis sa_amount);
  drop sale_analysis;
run;

你正在做的是第二个 set 语句,它从第二个数据集中获取变量,并将它们放在输出数据集中。由于它们只被引入一次,只要您没有 by 语句,它们就会保留在每一行中。 if _n_=1 表示只在第一行执行此操作(之后,您将无法找到另一行,数据步将终止)。

使用 sashelp.class 的简单示例:

data class;
  set sashelp.class;
  if _n_=1 then set sashelp.class(where=(name_barbara='Barbara') keep=name rename=name=name_barbara);
run;

总的来说,在SAS中合并数据是你必须作为自己的主题来学习的东西。我会在网上搜索有关该主题的好论文(使用 "Combining data" 或 "merging data" 和 SAS 作为搜索词)。它比 excel 更难,因为您没有对其他单元格的直接引用 - 但它也更强大。