Sas で retain ステートメントを使用する方法 (例付き)


SAS でRETAINステートメントを使用すると、 DATAステップの各反復の開始時に値が欠落として設定されない変数を指定できます。

RETAINステートメントは SAS のさまざまなタスクに使用できますが、最も一般的な 3 つの使用例を次に示します。

ケース 1: 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ステップの各反復で、単純に新しいsales値を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 に設定されました。そうでない場合は、 store_countの既存の値に 1 の値が追加されました。

追加リソース

次のチュートリアルでは、SAS で他の一般的なタスクを実行する方法について説明します。

SAS でグループごとの合計を計算する方法
SAS でグループごとの平均を計算する方法
SAS で移動平均を計算する方法

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です