如何在sas中使用retain语句(附示例)


您可以使用 SAS 中的RETAIN语句来指定一个变量,该变量的值不应在DATA步骤的每次迭代开始时设置为缺失。

RETAIN语句可用于 SAS 中的各种任务,但以下是三个最常见的用例:

情况一:使用RETAIN计算累加和

 data new_data;
    set original_data;
    retain cum_sum;
    cum_sum + values_variable;
run ;

情况2:使用RETAIN计算每组的累计和

 data new_data;
    set original_data;
    by grouping_variable
    retain cum_sum_by_group;
    if first.grouping_variable then cum_sum_by_group = values_variable;
    else cum_sum_by_group = cum_sum_by_group + values_variable;
run ;

案例 3:使用 RETAIN 计算每组的累积计数

 data new_data;
    set original_data;
    by grouping_variable
    retain count_by_group;
    if first.grouping_variable then count_by_group = 1 ;
    else count_by_group = count_by_group + 1 ;
run ;

以下示例展示了如何在实践中使用每个案例以及 SAS 中的以下数据集,该数据集显示不同商店连续几天的销售额:

 /*create dataset*/
data original_data;
    input store $sales;
    datalines ;
At 4
AT 5
At 2
B 6
B 3
B5
C 3
C 8
C 6
;
run ;

/*view dataset*/
proc print data = original_data; 

示例 1:使用 RETAIN 计算运行总和

以下代码演示如何使用RETAIN语句在数据集中创建一个显示销售额运行总和的新列:

 /*calculate cumulative sum of sales*/
data new_data;
    set original_data;
    retain cum_sales;
    cum_sales+sales;
run ;

/*view results*/
proc print data = new_data;

名为cum_sales的新列包含sales列中值的累积和。

例如:

  • 第 1 行累计和: 4
  • 第 2 行的累计和:4 + 5 = 9
  • 第 3 行的累计和:4 + 5 + 2 = 11

等等。

在此示例中, RETAIN语句将名为cum_sales 的变量设置为零,然后在DATA步骤的每次迭代中,它只是将新的销售值添加到cum_sales的运行总计中。

示例 2:使用 RETAIN 计算每组的累积和

以下代码演示如何使用RETAIN语句在数据集中创建一个新列,用于显示各商店的累计销售额:

 /*calculate cumulative sum of sales by store*/
data new_data;
    set original_data;
    by store;
    retain cum_sales_by_store;
    if first.store then cum_sales_by_store = sales;
    else cum_sales_by_store = cum_sales_by_store + sales;
run ;

/*view results*/
proc print data =new_data;

名为cum_sales_by_store的新列包含sales列中值的累积总和,按商店分组。

在此示例中, RETAIN语句将名为cum_sales_by_store的变量设置为零,然后在DATA步骤的每次迭代中,它检查 store 列中的值是否是该特定值的第一次出现。

如果这是第一次出现,则cum_sales_by_store的值将设置为 sales 列中的值。否则, sales 列中的值将添加到cum_sales_by_store的现有值中。

示例 3:使用 RETAIN 计算每组的累积计数

以下代码演示如何使用RETAIN语句在数据集中创建一个新列,用于显示每个商店的累计销售数:

 /*calculate cumulative count by store*/
data new_data;
    set original_data;
    by store
    retain store_count;
    if first.store then store_count = 1 ;
    else store_count = store_count + 1 ;
run ;

/*view results*/
proc print data = new_data;

名为store_count的新列包含每个商店的累积计数。

在此示例中, RETAIN语句将名为store_count的变量设置为零,然后在DATA步骤的每次迭代中,它检查 store 列中的值是否是该特定值的第一次出现。

如果这是第一次出现,则store_count的值设置为 1。否则,将值 1 添加到store_count的现有值中。

其他资源

以下教程解释了如何在 SAS 中执行其他常见任务:

如何在SAS中计算每组的总和
如何在SAS中计算每组的平均值
如何在 SAS 中计算移动平均值

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注